问题描述
|
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\")
有效,但是还有什么短的吗?
解决方法
您的Eclipse将换行标记设置为标准Windows \\ r \\ n,因此您具有\“ abcd \\ r \\ nefg \”。正则表达式将其变成\“ abcd \\ refg \”,Eclipse控制台对\\ r的处理与Windows Shell的处理略有不同。 REPL只是使用\\ n作为新的行标记,因此可以正常工作。
解决方案1:将Eclipse更改为仅使用\\ n换行符。
解决方案2:在需要控制换行符,使用单引号和显式\\ n字符时,请勿使用三引号引起来的字符串。
解决方案3:使用更复杂的正则表达式替换\\ r \\ n,\\ n或\\ r
, 特定于平台的行分隔符由返回
sys.props(\"line.separator\")
这将为您提供\“ \\ n \”或\“ \\ r \\ n \”,具体取决于您的平台。您可以随意将其包装在val中,但是您当然不能将其嵌入字符串文字中。
如果您阅读的文字不符合您平台的规则,这显然无济于事。
参考文献:
scala.sys软件包scaladoc(用于sys.props)
java.lang.System.getProperties javadoc(用于\“ line.separator \”)
, 如果确定此操作系统中使用的文件中的文件的行分隔符,则应执行以下操作:
s.replaceAll(System.lineSeparator,\"\")
正则表达式在其他地方应检测以下换行符序列:\“ \\ n \”(Linux),\“ \\ r \”(Mac),\“ \\ r \\ n \”(Windows):
s.replaceAll(\"(\\r\\n)|\\r|\\n\",\"\")
第二个更短,我认为更正确。
, 试试这个有趣的结构:)
import scala.compat.Platform.EOL
println(\"aaa\"+EOL+\"bbb\")
, var s = \"\"\"abcd
efg\"\"\".stripMargin.replaceAll(\"[\\n\\r]\",\"\")
, 改用\\r\\n
之前:
后: