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

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

Было бы достаточно просто написать:

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

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

Ответы [ 7 ]

50 голосов
/ 24 марта 2012

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

требуется только текстовое соответствие.

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

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

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

35 голосов
/ 24 марта 2012

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

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

На самом деле только две строки для ОС UNIX и Windows.

25 голосов
/ 18 апреля 2016

Поскольку Java 8 regex engine поддерживает \R, который представляет любой разделитель строк (немного больше информации: https://stackoverflow.com/a/31060125/1393766).

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

string = string.replaceAll("\\R", " --linebreak-- ");
3 голосов
/ 24 марта 2012

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

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

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

2 голосов
/ 26 ноября 2015

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

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

Java, регулярное выражение, необходимо экранировать обратную косую черту в регулярном выражении

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

1 голос
/ 02 сентября 2015

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

System.getProperty("line.separator")

Здесь, как для вашего примера,

string.replaceAll("\n", System.getProperty("line.separator"));
1 голос
/ 24 марта 2012

выглядит хорошо. Вы не хотите 2 обратной косой черты.

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum

...