Java Regex - использование метода String replaceAll для замены строк новой строки
У меня есть строка и хотелось бы просто заменить все строки новой строки в ней строкой " --linebreak-- "
.
Достаточно ли просто написать:
string = string.replaceAll("\n", " --linebreak-- ");
Я запутался с частью регулярного выражения. Нужно ли мне две черты для новой строки? Это достаточно хорошо?
Ответы
Ответ 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 и интерпретирует его как вкладку."
Ответ 6
Выглядит хорошо. Вы не хотите использовать обратную косую черту.
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum
Ответ 7
для новой строки существует свойство
System.getProperty("line.separator")
Здесь, как ваш пример,
string.replaceAll("\n", System.getProperty("line.separator"));