2009-02-22 18 views
11

私は正規表現の周りに頭を浮かべる時間がありません。プラットフォームはJavaです。Java正規表現 - 文字列内の空白を減らす

Iは1つのスペースに変更する

"Some text with spaces" 

すなわち、2つの以上の連続したスペースに変換される文字列

"Some text with spaces" 

みる必要があります。

+0

空白のみを意味するのか、「連続する空白文字が連続する」(タブなどが含まれる可能性がありますか)という意味ですか? –

答えて

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

これは、すべての単一スペースを1つのスペースで置換しますが、あまり効率的ではありません。連続して2つ以上ある場合にのみ交換してください。 –

+4

@Chris - 正規表現の最適化を早めに開始しないでください。これで十分です。 –

+5

はい、このソリューションは効率的ではありませんが、この操作がパフォーマンスのホットスポット内で行われていた場合にのみ問題になります。間違いなくダウンボントの価値はない。 –

11

我々はあなたがスペースのために特別にテストすることにしたい、スペースについて特に話をしている場合:\sを使用して

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

すべての空白が交換さになります - 時々希望、othertimesない。

また、唯一の一致2以上に簡単な方法である:(もちろん、任意の空白が単一空間と置き換えることが望まれるならば、これらの例の両方は\sを使用することができる)

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

Java用
+0

これは、myString = myString.replaceAll( "+"、 "")のようなものが必要であることを覚えておく価値があります。さもなければそれは有用な何もしません。 –

+0

確かに、私は単純に(今削除された)回答のフォーマットをコピーしたと思いますが、それを修正します。 –

1

(ジャバスクリプトないではなく、PHPのではなく、他の任意):あなたが避けるためjava.util.regex.Patternの定数を使用する必要が

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

は、式を再コンパイル毎回:別の方法で

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に含めます。

関連する問題