簡體   English   中英

Scala 中的換行符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM