Заменить новую строку/возврат с помощью пробела с помощью регулярного выражения
Довольно простой вопрос для тех, кто знает.
Вместо того, чтобы получать из
"This is my text.
And here is a new line"
To:
"This is my text. And here is a new line"
Я получаю:
"This is my text.And here is a new line.
Любая идея, почему?
L.replaceAll("[\\\t|\\\n|\\\r]","\\\s");
Я думаю, что нашел виновника.
В следующей строке я делаю следующее:
L.replaceAll( "[^a-zA-Z0-9|^!|^?|^.|^\\s]", "");
И это, похоже, вызывает мою проблему.
Любая идея, почему?
Я, очевидно, стараюсь сделать следующее: удалить все не-символы и удалить все новые строки.
Ответы
Ответ 1
\s
- это ярлык для символов пробела в регулярном выражении. Он не имеет смысла в строке. == > Вы не можете использовать его в своей заменяющей строке. Там вам нужно указать именно тех символов, которые вы хотите вставить. Если это пробел, просто используйте " "
в качестве замены.
Другое дело: почему вы используете 3 обратную косую черту как escape-последовательность? На Java достаточно двух. И вам не нужен |
(оператор чередования) в классе символов.
L.replaceAll("[\\t\\n\\r]+"," ");
Примечание
L
не изменяется. Если вы хотите получить результат, вам нужно сделать
String result = L.replaceAll("[\\t\\n\\r]+"," ");
Тестовый код:
String in = "This is my text.\n\nAnd here is a new line";
System.out.println(in);
String out = in.replaceAll("[\\t\\n\\r]+"," ");
System.out.println(out);
Ответ 2
Try
L.replaceAll("(\\t|\\r?\\n)+", " ");
В зависимости от системы, строка возвращает либо \r\n
, либо просто \n
.
Ответ 3
Я нашел этот.
String newString = string.replaceAll("\n", " ");
Хотя, поскольку у вас двойная линия, вы получите двойное пространство. Я думаю, вы могли бы сделать еще одну замену, чтобы заменить двойные пробелы на один.
Если это не работает, попробуйте сделать:
string.replaceAll(System.getProperty("line.separator"), " ");
Если я создаю строки в "string", используя "\n", мне пришлось использовать "\n" в регулярном выражении. Если я использовал System.getProperty(), я должен был использовать это.
Ответ 4
Ваше регулярное выражение хорошо, я бы заменил его пустой строкой
String resultString = subjectString.replaceAll("[\t\n\r]", "");
Вы ожидаете пробел между "текстом". и "И" правильно?
Я получаю это пространство, когда я пытаюсь создать регулярное выражение, скопировав образец
"This is my text. "
Итак, все хорошо. Может быть, если вы просто замените его пустой строкой, он будет работать. Я не знаю, почему вы замените его на \s. И чередование | не требуется в классе символов.
Ответ 5
Новый разделитель строк различен для разных ОС - '\ r\n' для Windows и '\n' для Linux.
Чтобы быть в безопасности, вы можете использовать шаблон регулярных выражений \ R - соответствие строк, появившееся в Java 8:
String inlinedText = text.replaceAll("\\R", " ");
Ответ 6
Вы можете использовать первый сплит и присоединиться к нему с использованием пробела.
он будет работать уверенно.
String[] Larray = L.split("[\\n]+");
L = "";
for(int i = 0; i<Larray.lengh; i++){
L = L+" "+Larray[i];
}