[英]New line character in Scala
Scala 中是否有換行符的簡寫? 在 Java(在 Windows 上)中,我通常只使用“\n”,但這似乎在 Scala 中不起作用 - 特別是
val s = """abcd
efg"""
val s2 = s.replace("\n", "")
println(s2)
輸出
abcd
efg
在 Eclipse 中,
efgd
(原文如此)從命令行,以及
abcdefg
來自 REPL(大成功!)
String.format("%n")
有效,但還有什么更短的嗎?
特定於平台的行分隔符由
sys.props("line.separator")
這將為您提供“\n”或“\r\n”,具體取決於您的平台。 您可以將其包裝在 val 中,但您當然不能將其嵌入到字符串文字中。
如果您正在閱讀不符合您平台規則的文本,這顯然無濟於事。
參考:
您的 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
如果您確定在此操作系統中使用的文件的行分隔符,您應該執行以下操作:
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
前:
后:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.