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

Java Regex - сокращение пробелов в строке

У меня нет времени поднять голову вокруг регулярного выражения, и мне нужен быстрый ответ. Платформа - это Java.

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

"Some text   with  spaces"

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

"Some text with spaces"

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

4b9b3361

Ответ 1

String a = "Some    text  with   spaces";
String b = a.replaceAll("\\s+", " ");
assert b.equals("Some text with spaces");

Ответ 2

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

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

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

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

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

(Конечно, оба этих примера могут использовать \s, если требуется, чтобы любые пробелы были заменены одним пробелом.)

Ответ 3

Для Java (не javascript, а не php, а не любой другой):

txt.replaceAll("\\p{javaSpaceChar}{2,}"," ")

Ответ 4

Вам нужно использовать константу 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.