Java Regex, который заменяет только несколько пробелов на неразрывные пробелы - PullRequest
6 голосов
/ 03 марта 2010

Я ищу способ регулярного выражения Java для замены нескольких пробелов неразрывными пробелами. Два или более пробела должны быть заменены одинаковым количеством неразрывных пробелов, но одиночные пробелы НЕ должны заменяться. Это должно работать для любого количества пробелов. И первые символы могут быть 1 или более пробелами.

Так что, если моя строка начинается так:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

Мне нужна новая строка, чтобы она выглядела так:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

Ответы [ 3 ]

4 голосов
/ 03 марта 2010

Давайте использовать магию регулярных выражений (черных?).

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
Pattern p = Pattern.compile(" (?= )|(?<= ) ");
Matcher m = p.matcher(testStr);
String res = m.replaceAll("&nbsp;");

Шаблон ищет либо пробел, за которым следует другой, либо пробел после другого. Таким образом, он ловит все пробелы в последовательности. На моей машине, с Java 1.6, я получаю ожидаемый результат:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES
2 голосов
/ 03 марта 2010

Вы также можете пропустить регулярное выражение все вместе.

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String _replaced = testStr.replace("  ", "&nbsp;&nbsp;");
String replaced = _replaced.replace("&nbsp; ", "&nbsp;&nbsp;");

Я не проверял это, но первый находит все случаи двух пробелов и заменяет их неразрывными пробелами. Второй находит случаи, когда было нечетное количество пробелов, и исправляет его двумя nbsps.

2 голосов
/ 03 марта 2010

Редактировать: Это не обрабатывает пунктуацию, и при переработке его для обработки пунктуации потребуется использовать тот же подход, что и в ответе Серхио, но с двумя шагами вместо одного. Следовательно, это неадекватный ответ и был отозван.


Оригинальный ответ ниже:

Самый простой способ, который я могу придумать, это двухэтапный метод.

Сначала замените все пробелы на "& nbsp;". Это довольно быстро, потому что это не обязательно регулярное выражение.

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String replaced = testStr.replace(" ", "&nbsp;");

Затем замените все отдельные экземпляры "& nbsp;" с пробелами.

String replaced2 = replaced.replaceAll("\\b&nbsp;\\b", " ");
System.out.println(replaced2);

Результат:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...