Новая строка персонажа в Scala - PullRequest
20 голосов
/ 01 июня 2011

Есть ли сокращение для символа новой строки в 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 ]

23 голосов
/ 26 февраля 2012

Разделитель строки для конкретной платформы возвращается

sys.props("line.separator")

Это даст вам либо "\ n", либо "\ r \ n", в зависимости от вашей платформы. Вы можете обернуть это в val настолько кратко, насколько пожелаете, но, конечно, вы не можете встроить его в строковый литерал.

Если вы читаете текст, который не соответствует правилам для вашей платформы, это, очевидно, не поможет.

Ссылки:

15 голосов
/ 01 июня 2011

Ваш Eclipse делает маркер новой строки стандартным Windows \ r \ n, поэтому у вас есть "abcd \ r \ nefg". Регулярное выражение превращает его в «abcd \ refg», а консоль Eclipse работает немного иначе, чем оболочка Windows. REPL просто использует \ n в качестве маркера новой строки, поэтому он работает как положено.

Решение 1: измените Eclipse, чтобы использовать \ n символы новой строки.

Решение 2. Не используйте строки в тройных кавычках, когда вам нужно управлять символами новой строки, используйте одинарные кавычки и явные символы \ n.

Решение 3: используйте более сложное регулярное выражение для замены \ r \ n, \ n или \ r

7 голосов
/ 21 мая 2014

Если вы уверены, что разделитель строк файла в том, который используется в этой ОС, вы должны сделать следующее:

s.replaceAll(System.lineSeparator, "")

В другом месте ваше регулярное выражение должно обнаруживать следующие последовательности новой строки: "\ n" (Linux), "\ r" (Mac), "\ r \ n" (Windows):

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

Второй короче и, думаю, правильнее.

6 голосов
/ 23 марта 2016

Попробуйте эту интересную конструкцию:)

import scala.compat.Platform.EOL
println("aaa"+EOL+"bbb")
5 голосов
/ 26 февраля 2012
var s = """abcd
efg""".stripMargin.replaceAll("[\n\r]","")
1 голос
/ 01 июня 2011

Используйте \r\n вместо

До:

before

После того, как:

after

...