Замените\n и \r\n <br/"> в java
Это задано несколько раз для нескольких языков, но я не могу заставить его работать.
У меня есть строка, подобная этой
String str = "This is a string.\nThis is a long string.";
И я пытаюсь заменить \n
на <br />
, используя
str = str.replaceAll("(\r\n|\n)", "<br />");
но \n
не заменяется.
Я попытался использовать этот RegEx Tool, чтобы проверить, и я вижу тот же результат. Строка ввода не имеет соответствия для "(\r\n|\n)"
. Что я делаю неправильно?
Ответы
Ответ 1
Это работает для меня.
public class Program
{
public static void main(String[] args) {
String str = "This is a string.\nThis is a long string.";
str = str.replaceAll("(\r\n|\n)", "<br />");
System.out.println(str);
}
}
Результат:
This is a string.<br />This is a long string.
Ваша проблема в другом месте.
Ответ 2
Немного более надежная версия того, что вы пытаетесь:
str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
Ответ 3
Для меня это сработало:
rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");
Совет: используйте тестер регулярных выражений для быстрого тестирования без компиляции в вашей среде
Ответ 4
Поскольку моя учетная запись новая, я не могу ответить на вопрос Нино ван Хуфа. Если ваши строки поступают из источника на базе Windows, такого как сервер на основе aspx, это решение действительно работает:
rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");
Кажется, это проблема с необычным набором символов, поскольку двойные обратные косые черты интерпретируются как одиночные символы слэш-символа. Следовательно, потребность в четырехкратных чертах выше.
Опять же, в большинстве случаев "(\\r\\n|\\n)"
должен работать, но если ваши строки поступают из источника на базе Windows, попробуйте выше.
Просто FYI попробовал все, чтобы исправить проблему, с которой я заменял эти окончания строк. Сначала мысль о неудачной конверсии от Windows-1252
до UTF-8
. Но это тоже не сработало. Это решение - вот что, наконец, сделало трюк.:)
Ответ 5
Это работает для меня. Код Java работает точно так же, как вы его написали. В тесте входная строка должна быть:
This is a string.
This is a long string.
... с реальной подачей строки. Вы не можете использовать:
This is a string.\nThis is a long string.
... потому что он обрабатывает \n
как литеральную последовательность обратного слэша 'n'.
Ответ 6
Это должно работать, но не убивайте себя, пытаясь понять это. Просто используйте 2 прохода.
str = str.replaceAll("(\r\n)", "<br />");
str = str.replaceAll("(\n)", "<br />");
Отказ от ответственности: это не очень эффективно.
Ответ 7
Это должно сработать. Вам нужно добавить две черты
str = str.replaceAll("(\\r\\n|\\n)", "<br />");
В этом Reference показан пример, показывающий
private final String REGEX = "\\d"; // a single digit
Я использовал две слэши во многих моих проектах и, похоже, работает нормально!