修剪Scala中的字符串

yAs*_*AsH 34 string scala

如何在Scala中修剪字符串的开始和结束字符

如果输入是

__PRE__

我需要输出为hello

在Scala中是否有任何内置方法可以执行此操作?

Dir*_*irk 79

尝试

val str = "  foo  "
str.trim
Run Code Online (Sandbox Code Playgroud)

并查看文档.如果你还需要摆脱这个,角色,你可以尝试以下方法:

str.stripPrefix(",").stripSuffix(",").trim
Run Code Online (Sandbox Code Playgroud)

另一种清理字符串前端的方法是

val ignoreable = ", \t\r\n"
str.dropWhile(c => ignorable.indexOf(c) >= 0)
Run Code Online (Sandbox Code Playgroud)

这也会照顾到像 ",,, ,,hello"

好的方法是,这里有一个很小的功能,它可以通过字符串从左到右进行一次扫描:

def stripAll(s: String, bad: String): String = {

    @scala.annotation.tailrec def start(n: Int): String = 
        if (n == s.length) ""
        else if (bad.indexOf(s.charAt(n)) < 0) end(n, s.length)
        else start(1 + n)

    @scala.annotation.tailrec def end(a: Int, n: Int): String =
        if (n <= a) s.substring(a, n)
        else if (bad.indexOf(s.charAt(n - 1)) < 0) s.substring(a, n)
        else end(a, n - 1)

   start(0)
}
Run Code Online (Sandbox Code Playgroud)

用得像

stripAll(stringToCleanUp, charactersToRemove)
Run Code Online (Sandbox Code Playgroud)

例如,

stripAll("  , , , hello , ,,,, ", " ,") => "hello"
Run Code Online (Sandbox Code Playgroud)


lre*_*der 11

要修剪字符串中的开始和结束字符,请使用drop和dropRight的混合:

scala>"你好,".drop(1).dropRight(1)

res4:String =你好

drop调用删除第一个字符,dropRight删除最后一个字符.请注意,这不像修剪那样"聪明".如果你在"你好"开头没有任何额外的角色,你会将它修剪为"ello".如果你需要更复杂的东西,正则表达式替换可能就是答案.

  • 这仅适用于要删除的固定数量的字符,并且依赖于开头和结尾都需要修剪的事实。这种情况很少发生。 (2认同)

Jea*_*let 8

如果你只想修剪逗号并且两端都有多个逗号,你可以这样做:

str.dropWhile(_ == ',').reverse.dropWhile(_ == ',').reverse
Run Code Online (Sandbox Code Playgroud)

reverse这里的用法是因为没有dropRightWhile.

如果你正在寻找一个可能的逗号,stripPrefix并且stripSuffix是要走的路,由德克所示.