Новый символ строки в Scala
Есть ли сокращение для нового символа строки в Scala? В Java (в Windows) я обычно просто использую "\n", но это не работает в Scala - специально
val s = """abcd
efg"""
val s2 = s.replace("\n", "")
println(s2)
выходы
abcd
efg
в Eclipse,
efgd
(sic) из командной строки и
abcdefg
из REPL (GREAT SUCCESS!)
String.format("%n")
работает, но есть ли что-нибудь короче?
Ответы
Ответ 1
Ваш Eclipse делает маркер новой строки стандартной Windows\r\n, поэтому у вас есть "abcd\r\nefg". Регулярное выражение превращает его в "abcd\refg", а консоль Eclipse немного отличается от того, как выглядит оболочка Windows. REPL просто использует \n в качестве нового маркера строки, поэтому он работает так, как ожидалось.
Решение 1: измените Eclipse, чтобы просто использовать \n символы новой строки.
Решение 2: не используйте тройные кавычки, когда вам нужно управлять символами новой строки, использовать одинарные кавычки и явные символы \n.
Решение 3: используйте более сложное регулярное выражение для замены \r\n,\n или\r
Ответ 2
Отделитель строки для конкретной платформы возвращается
sys.props("line.separator")
Это даст вам "\n" или "\ r\n", в зависимости от вашей платформы. Вы можете обернуть это в val как можно более кратким, но, конечно, вы не можете вставлять его в строковый литерал.
Если вы читаете текст, который не соответствует правилам для вашей платформы, это явно не поможет.
Литература:
Ответ 3
var s = """abcd
efg""".stripMargin.replaceAll("[\n\r]","")
Ответ 4
Если вы уверены, что разделитель строк в файле, используемый в этой ОС, вы должны сделать следующее:
s.replaceAll(System.lineSeparator, "")
В другом месте ваше регулярное выражение должно обнаруживать следующие строки новой строки: "\n" (Linux), "\ r" (Mac), "\ r\n" (Windows):
s.replaceAll("(\r\n)|\r|\n", "")
Вторая короче и, я думаю, более правильная.
Ответ 5
Попробуйте эту интересную конструкцию:)
import scala.compat.Platform.EOL
println("aaa"+EOL+"bbb")
Ответ 6
Используйте \r\n
вместо
До:
![before]()
После:
![after]()