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

Java Regex - использование метода String replaceAll для замены строк новой строки

У меня есть строка и хотелось бы просто заменить все строки новой строки в ней строкой " --linebreak-- ".

Достаточно ли просто написать:

string = string.replaceAll("\n", " --linebreak-- ");

Я запутался с частью регулярного выражения. Нужно ли мне две черты для новой строки? Это достаточно хорошо?

4b9b3361

Ответ 1

Не используйте регулярное выражение!. Для замены "\n" требуется только текстовое совпадение.

Используйте replace(), чтобы заменить литеральную строку другим:

string = string.replace("\n", " --linebreak-- ");

Обратите внимание, что replace() все еще заменяет все вхождения, как и replaceAll() - разница заключается в том, что replaceAll() использует regex для поиска.

Ответ 2

Используйте ниже регулярное выражение:

 s.replaceAll("\\r?\\n", " --linebreak-- ")

Для UNIX и ОС Windows существует только две строки новой строки.

Ответ 3

Так как Java regex engine поддерживает \R, который представляет любой разделитель строк (немного больше информации: fooobar.com/questions/21786/...).

Итак, если у вас есть доступ к Java 8, вы можете использовать

string = string.replaceAll("\\R", " --linebreak-- ");

Ответ 4

Нет необходимости в 2 backslashes.

 String string = "hello \n world" ;
 String str = string.replaceAll("\n", " --linebreak-- ");
 System.out.println(str);

Выход = hello --linebreak-- world

Ответ 5

Просто добавьте это для полноты, потому что 2 обратная косая черта реальна.

Обратитесь к ответу @dasblinkenlight в следующем вопросе SO (говоря о \t, но он применяется и для \n):

java, регулярное выражение, нужно избежать обратного слэша в регулярном выражении

"Существует две интерпретации escape-последовательностей: сначала компилятор Java, а затем движок regexp. Когда компилятор Java видит две слэши, он заменяет их одной косой чертой. Когда есть t, следуя косой чертой, Java заменяет его на вкладку, а когда происходит двойная слэш, Java оставляет ее в покое. Однако, поскольку две слэши были заменены одной косой чертой, движок regexp видит \t и интерпретирует его как вкладку."

Ответ 7

для новой строки существует свойство

System.getProperty("line.separator")

Здесь, как ваш пример,

string.replaceAll("\n", System.getProperty("line.separator"));