斯卡拉String
方法(在StringOps
类)stripMargin
去除的多线String
的每一行至多前导空白和包括该管(|
)字符(或其他指定的分隔符)。Scala的带尾的空格
是否有一个等价的方法来删除每行的尾部空白?
我快速浏览了Scaladocs,但找不到一个。
斯卡拉String
方法(在StringOps
类)stripMargin
去除的多线String
的每一行至多前导空白和包括该管(|
)字符(或其他指定的分隔符)。Scala的带尾的空格
是否有一个等价的方法来删除每行的尾部空白?
我快速浏览了Scaladocs,但找不到一个。
您可以轻松地使用正则表达式为:
input.replaceAll("""(?m)\s+$""", "")
在正则表达式的(?m)
前缀使其成为一个多正则表达式。 \s+
匹配1个或多个空白字符和$
行结束(因为多行标志)。
也许是:s.lines.map(_.reverse.stripMargin.reverse).mkString("\n")
或System.getProperty("line.separator")
代替"\n"
?!
这可能不是最有效的方式,但你也可以这样做:
scala> println("<"+" abc ".trim+">")
<abc>
的Java String
方法trim
从开头和结尾删除空格'n'mkString(像摇滚乐一样):
val lines = """
This is
a test
a foolish
test
a
test
t
"""
lines.split ("\n").map (_.trim).mkString ("\n")
res22: String =
This is
a test
a foolish
test
a
test
t
但是,这只会分别从多行字符串的第一行和第一行中删除空格。 – Ralph 2011-05-18 19:51:44
@Ralph啊的确如此。抱歉。 – 2011-05-18 19:57:31
拆分 'N' 微调:
val trimmed = str.lines map { s => s.reverse.dropWhile (c => c == ' ').reverse.mkString(System.getProperty("line.seperator"))
注意:split(“\ n”)使用正则表达式匹配。使用split('\ n')似乎更好地传达了预期的含义(在最近的世界中不会有性能差异,因为split是单字符模式的特殊外壳 - 请参阅[Java split String performance](http:// stackoverflow的.com /一个/16673分之11002374)。 – Suma 2015-02-27 14:46:22
str.reverse.dropWhile(_ == ' ').reverse
不错'行',但'_ =='''是可能的 – 2011-05-18 17:11:08
是的,我在发布后想到了这一点。 – 2011-05-18 17:14:26