2011-05-18 69 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