Scala中的新行字符

时间:2011-05-31 21:48:37

标签: scala newline

Scala中是否有换行符号的简写?在Java(在Windows上)我通常只使用“\ n”,但这似乎在Scala中不起作用 - 特别是

val s = """abcd
efg"""
val s2 = s.replace("\n", "")
println(s2)

输出

abcd
efg

在Eclipse中,

efgd
从命令行

(sic),

abcdefg

来自REPL(伟大的成功!)

String.format("%n")有效,但有什么更短的吗?

6 个答案:

答案 0 :(得分:22)

返回特定于平台的行分隔符
sys.props("line.separator")

这将为您提供“\ n”或“\ r \ n”,具体取决于您的平台。您可以根据需要将其包装在val中,但当然不能将其嵌入字符串文字中。

如果您正在阅读不符合平台规则的文字,这显然无济于事。

参考文献:

答案 1 :(得分:15)

您的Eclipse将换行标记设置为标准Windows \ r \ n,因此您有“abcd \ r \ nefg”。正则表达式正在将其变为“abcd \ refg”,而Eclipse控制台正在使用与Windows shell的运行方式略有不同的方式。 REPL只是使用\ n作为新行标记,因此它按预期工作。

解决方案1:将Eclipse更改为仅使用\ n换行符。

解决方案2:当您需要控制换行符,使用单引号和显式\ n字符时,不要使用三重引号字符串。

解决方案3:使用更复杂的正则表达式替换\ r \ n,\ n或\ r

答案 2 :(得分:6)

如果你确定该操作系统中使用的文件的行分隔符,你应该执行以下操作:

s.replaceAll(System.lineSeparator, "")

在其他地方,你的正则表达式应该检测以下换行序列:" \ n" (Linux)," \ r" (Mac)," \ r \ n" (视窗):

s.replaceAll("(\r\n)|\r|\n", "")

第二个更短,我认为更正确。

答案 3 :(得分:6)

尝试这个有趣的结构:)

import scala.compat.Platform.EOL
println("aaa"+EOL+"bbb")

答案 4 :(得分:5)

var s = """abcd
efg""".stripMargin.replaceAll("[\n\r]","")

答案 5 :(得分:1)

使用\r\n代替

在:

before

后:

after