Подтвердить что ты не робот

Заменить новую строку/возврат с помощью пробела с помощью регулярного выражения

Довольно простой вопрос для тех, кто знает.

Вместо того, чтобы получать из

"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]", "");

И это, похоже, вызывает мою проблему.

Любая идея, почему?

Я, очевидно, стараюсь сделать следующее: удалить все не-символы и удалить все новые строки.

4b9b3361

Ответ 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];  
}