Java Regex - уменьшить пробелы в строке - PullRequest
11 голосов
/ 22 февраля 2009

У меня нет времени, чтобы разобраться в регулярных выражениях, и мне нужен быстрый ответ. Платформа Java.

Мне нужна строка

"Some text   with  spaces"

... для преобразования в

"Some text with spaces"

, т. Е. 2 ​​или более последовательных пробела должны быть заменены на 1 пробел.

Ответы [ 4 ]

47 голосов
/ 22 февраля 2009
String a = "Some    text  with   spaces";
String b = a.replaceAll("\\s+", " ");
assert b.equals("Some text with spaces");
12 голосов
/ 23 февраля 2009

Если мы говорим конкретно о пробелах, вы хотите протестировать специально для пробелов:

MyString = MyString.replaceAll(" +", " ");

Использование \s приведет к замене всех пробелов - иногда желательно, в других случаях нет.

Кроме того, более простой способ сопоставления только 2 или более:

MyString = MyString.replaceAll(" {2,}", " ");

(Конечно, в обоих этих примерах можно использовать \s, если желательно заменить какой-либо пробел одним пробелом.)

1 голос
/ 11 июня 2013

Для Java (не javascript, не php, не anyother):

txt.replaceAll("\\p{javaSpaceChar}{2,}"," ")
0 голосов
/ 26 августа 2013

Вам нужно использовать константу java.util.regex.Pattern, чтобы избежать перекомпиляции выражения каждый раз:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile(" {2,}");

public static void main(String[] args) {
    String input = "Some text   with spaces";
    System.out.println(
        REGEX_PATTERN.matcher(input).replaceFirst(" ")
    );  // prints "Some text with spaces"
}

Другими словами, Apache Commons Lang включает в класс StringUtils метод normalizeSpace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...