java replaceAll и совпадение '+' - PullRequest
0 голосов
/ 08 июля 2011

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

String formattedString = unformattedString.replaceAll(" +"," ");

Мое понимание этого типа регулярных выражений состоит в том, что он будет соответствовать как можно большему количеству пробелов перед остановкой. Однако мои поступающие строки никак не меняются. Возможно ли, что он соответствует только одному пробелу за раз, а затем заменяет его пробелом? Есть ли что-то в методе replaceAll, так как он выполняет несколько совпадений, что изменит способ работы этого типа совпадения?

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Лучшим подходом может быть использование "\\s+" для сопоставления серий всех возможных пробельных символов.

EDIT

Другой подход может заключаться в извлечении всех совпадений для "\\b([A-Za-z0-9]+)\\b" и последующем присоединенииони используют пробел, который позволит вам удалить все, кроме допустимых слов и цифр.

Если вам нужно сохранить пунктуацию, используйте "(\\S+)", которая будет захватывать все серии непробельных символов.

0 голосов
/ 14 декабря 2011

все ответы должны работать.

Оба:

String formattedString = unformattedString.replaceAll(" +"," ");

или

String formattedString = unformattedString.replaceAll("\\s+"," ");

Может быть, unformattedString является многострочным выражением. В этом случае вы можете создать экземпляр объекта Pattern

String unformattedString = "  Hello \n\r\n\r\n\r     World";
Pattern manySpacesPattern = Pattern.compile("\\s+",Pattern.MULTILINE);
Matcher formatMatcher = manySpacesPattern.matcher(unformattedString);
String formattedString = formatMatcher.replaceAll(" ");
System.out.println(unformattedString.replaceAll("\\s+", " "));

Или, может быть, у unformattedString есть специальные символы, в этом случае вы можете играть с помощью Pattern flags и метода компиляции. Примеры:

Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNIX_LINES);

или

Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNICODE_CASE);
0 голосов
/ 08 июля 2011

Вы уверены, что строка - это пробелы, а не символы табуляции? Следующее является немного более "агрессивным" на пустом месте.

String formattedString = unformattedString.replaceAll("\\s+"," ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...