Это несколько раз просили относительно нескольких языков, но я не могу заставить это работать. У меня есть строка как это
String str = "This is a string.\nThis is a long string.";
И я пытаюсь заменить \n
с
использование
str = str.replaceAll("(\r\n|\n)", "
");
но \n
не становится замененным. Я пытался использовать этот Инструмент RegEx для проверки, и я вижу тот же результат. Входная строка не имеет достойным "(\r\n|\n)"
. Что я делаю неправильно?
У меня работает.
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)", "<br />");
str = str.replaceAll("(\n)", "<br />");
Отказ от ответственности: это не очень эффективно.
Это должно сработать. Вам нужно поставить две косые черты
str = str.replaceAll("(\\r\\n|\\n)", "<br />");
В этом справочнике есть пример, который показывает
private final String REGEX = "\\d"; // a single digit
, что я использовал две косые черты во многих своих проектах, и, похоже, он работает нормально!
У меня работает. Код Java работает точно так, как вы его написали. В тестере входная строка должна быть:
This is a string.
This is a long string.
... с реальным переводом строки. Вы не можете использовать:
This is a string.\nThis is a long string.
... потому что он обрабатывает \ n
как буквальную последовательность обратной косой черты 'n' .
Немного более надежная версия того, что вы пытаетесь сделать:
str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");