заменить n и rn на в java

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

String str = "This is a string.nThis is a long string.";

и я пытаюсь заменить n С <br /> используя

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

но n не заменяли. Я пытался использовать это RegEx Tool чтобы проверить и вижу тот же результат. Входная строка не имеет соответствия для "(rn|n)". Что я делаю не так ?

7 ответов


это работает для меня.

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.

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


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

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

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

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

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


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

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

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

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

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


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

This is a string.
This is a long string.

...с настоящей подачей. Вы не можете использовать:

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

...потому что он лечит \n как буквальная последовательность обратная косая черта 'n'.


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

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

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


Это должно работать. Вам нужно поставить в два Слэша

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

в этой ссылка есть пример, который показывает

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

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