заменить \ n и \ r \ n нав Яве - PullRequest
62 голосов
/ 17 июня 2010

Несколько раз спрашивали об этом на нескольких языках, но я не могу заставить его работать. У меня есть такая строка

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)". Что я делаю не так?

Ответы [ 7 ]

112 голосов
/ 17 июня 2010

У меня работает.

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.

Ваша проблема в другом месте.

19 голосов
/ 17 июня 2010

Немного более надежная версия того, что вы пытаетесь:

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
17 голосов
/ 21 августа 2012

Для меня это сработало:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");

Совет: используйте тестер регулярных выражений для быстрого тестирования без компиляции в вашей среде

8 голосов
/ 02 июля 2014

Так как мой аккаунт новый, я не могу проголосовать за ответ Нино ван Хоффа.Если ваши строки поступают из источника на основе Windows, такого как сервер на базе aspx, это решение работает:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");

Кажется, что это странная проблема с набором символов, поскольку двойные обратные слеши интерпретируются как одиночныекосые чертыСледовательно, необходимость в четырехкратных слешах выше.

Опять же, в большинстве случаев "(\\r\\n|\\n)" должно работать, но если ваши строки поступают из источника на основе Windows, попробуйте описанное выше.

Просто к сведениюпопробовал все, чтобы исправить проблему, которую я имел, заменяя те окончания строки.Поначалу считалось неудачным преобразование из Windows-1252 в UTF-8.Но это тоже не сработало.Это решение, что, наконец, сделал свое дело.:)

2 голосов
/ 17 июня 2010

Это работает для меня. Код Java работает точно так, как вы его написали. В тестере входная строка должна быть:

This is a string.
This is a long string.

... с реальным переводом строки. Вы не можете использовать:

This is a string.\nThis is a long string.

... потому что он трактует \n как буквенную последовательность обратный слеш 'n' .

0 голосов
/ 17 июня 2010

Это должно работать.Вам нужно вставить две косые черты

str = str.replaceAll("(\\r\\n|\\n)", "<br />");

В этом справочнике приведен пример, показывающий

private final String REGEX = "\\d"; // a single digit

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

0 голосов
/ 17 июня 2010

Это должно сработать, но не убивайте себя, пытаясь понять это. Просто используйте 2 прохода.

str  = str.replaceAll("(\r\n)", "<br />");
str  = str.replaceAll("(\n)", "<br />");

Отказ от ответственности: это не очень эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...