заменить 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
я использовал две косые черты во многих моих проектах, и это, кажется, работает хорошо!