Подтвердить что ты не робот

Новый символ строки в 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") работает, но есть ли что-нибудь короче?

4b9b3361

Ответ 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