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

Замените\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)". Что я делаю неправильно?

4b9b3361

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

Я использовал две слэши во многих моих проектах и, похоже, работает нормально!