2009-02-22 4 views
11

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

мне нужно строку

"Some text with spaces" 

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

"Some text with spaces" 

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

+0

Вы имеете в виду ТОЛЬКО пробелы, или вы имеете в виду «любой пробег последовательных символов пробела» (который может включать в себя вкладки и т. Д.)? –

ответ

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

Это сделает замены всех одиночных пространств единым пространством, не очень эффективным. Вы должны заменить его только в том случае, если есть два или более подряд. –

+4

@Chris - не начинайте оптимизировать регулярное выражение преждевременно, я считаю, этого будет достаточно. –

+5

Да, это решение не так эффективно, как могло бы быть, но это имело бы значение только в том случае, если эта операция проходила внутри точки доступа производительности. Это определенно не стоит нисходящего. –

11

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

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

Использование \s приведет все пробельные заменяются - иногда желательно, А иногда даже не.

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

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

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

+0

Стоит помнить, что вам нужно что-то вроде myString = myString.replaceAll («+», «»); в противном случае это не принесет ничего полезного. –

+0

Действительно - я думаю, что просто скопировал формат ответа (теперь удален), но исправит его. –

1

для Java (не яваскрипт, а не PHP, а не anyother):

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

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