2011-05-18 68 views
16

斯卡拉String方法(在StringOps类)stripMargin去除的多线String的每一行至多前导空白和包括该管(|)字符(或其他指定的分隔符)。Scala的带尾的空格

是否有一个等价的方法来删除每行的尾部空白?

我快速浏览了Scaladocs,但找不到一个。

回答

21

您可以轻松地使用正则表达式为:

input.replaceAll("""(?m)\s+$""", "") 

在正则表达式的(?m)前缀使其成为一个多正则表达式。 \s+匹配1个或多个空白字符和$行结束(因为多行标志)。

1

也许是:s.lines.map(_.reverse.stripMargin.reverse).mkString("\n")System.getProperty("line.separator")代替"\n"?!

2

这可能不是最有效的方式,但你也可以这样做:

scala> println("<"+" abc ".trim+">") 
<abc> 
+0

不错'行',但'_ =='''是可能的 – 2011-05-18 17:11:08

+0

是的,我在发布后想到了这一点。 – 2011-05-18 17:14:26

21

的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 
+6

但是,这只会分别从多行字符串的第一行和第一行中删除空格。 – Ralph 2011-05-18 19:51:44

+0

@Ralph啊的确如此。抱歉。 – 2011-05-18 19:57:31

5

拆分 'N' 微调:

val trimmed = str.lines map { s => s.reverse.dropWhile (c => c == ' ').reverse.mkString(System.getProperty("line.seperator")) 
+0

注意:split(“\ n”)使用正则表达式匹配。使用split('\ n')似乎更好地传达了预期的含义(在最近的世界中不会有性能差异,因为split是单字符模式的特殊外壳 - 请参阅[Java split String performance](http:// stackoverflow的.com /一个/16673分之11002374)。 – Suma 2015-02-27 14:46:22

0
str.reverse.dropWhile(_ == ' ').reverse