2016-04-07 44 views
7

私はJavaのStringからすべての繰り返し文字を置き換えようとしています。例えば再帰的replaceAll java

aaaaa --->、私はreplaceAll方法使用しようとしていることについてはa

:私は再帰的な方法を開発した

"aaaaa".replaceAll("a*","a") //returns "aa" 

、おそらくではありません非常に効率的:

public String recursiveReplaceAll(String original,String regex, String replacement) { 
    if (original.equals(original.replaceAll(regex, replacement))) return original; 
    return recursiveReplaceAll(original.replaceAll(regex, replacement),regex,replacement); 
} 

このメソッドは機能しますが、RegExを使用しているものがあるかどうかは疑問がありました。

+2

'replaceAll(" a + "、" a ")' – rock321987

答えて

12

あなたのreplaceAllアプローチはほぼ正しいです - それはちょうど*が0回の出現にマッチすることです。 +に「1つ以上」を意味します。

"aaaaa".replaceAll("a+","a") // Returns "a" 
7

再帰せずに行うことができます。正規表現"(.)\\1+"は、すべての文字の後にとなり、それ自体がat least onceになり、キャプチャされた文字に置き換えられます。したがって、これは繰り返し文字を削除します。

public static void main(String[] args) { 
    String str = "aaaabbbaaa"; 
    String result = str.replaceAll("(.)\\1+", "$1"); 
    System.out.println(result); // prints "aba". 
} 

これはすべての文字に適用されます。