2016-07-29 9 views
0

Stringの2つの部分文字列を置き換えたいので、次のコードを記述します。私は、Sが巨大な文字列であるとき、コードの効率が低すぎると思います。文字列の複数の部分文字列を一度に置き換える方法は?

文字列の複数の部分文字列を一度に置き換えることはできますか?または文字列を置き換えるためのより良い方法はありますか?

を追加しました:

私はすぐにサブストリング置き換えることができる方法を見つけることを願っています!

String s="This %ToolBar% is a %Content%"; 

    s=s.replace("%ToolBar%","Edit ToolBar"); 
    s=s.replace("%Content%","made by Paul"); 
+1

いつでも 's = s.replace("%ToolBar% "、" Edit ToolBar ")のようにチェーンしてもかまいません。replace("%Content% "、" made by Paul "); ://stackoverflow.com/questions/7658568/most-efficient-way-to-use-replace-multiple-words-in-a-string –

+0

正規表現はどうですか? –

+1

私はあなたのコードを見て、私はすぐにそれを理解することができ、このコードを1年保つことができるでしょう。なぜそれを変更したいのですか? –

答えて

3

だけsの1件の検索を実行したい場合は、あなたがあなた自身のindexOf()ループを行う、または正規表現の置換ループを使用することができます。

appendReplacement()およびappendTail()メソッドを使用して結果を構築する正規表現置換ループを使用する例を次に示します。

キーワードを見つけ出すために文字列比較を行う必要をなくすために、各キーワードはキャプチャグループになっているので、キーワードの存在はstart(int group)を使用して素早く確認できます。

String s = "This %ToolBar% is a %Content%"; 

StringBuffer buf = new StringBuffer(); 
Matcher m = Pattern.compile("%(?:(ToolBar)|(Content))%").matcher(s); 
while (m.find()) { 
    if (m.start(1) != -1) 
     m.appendReplacement(buf, "Edit ToolBar"); 
    else if (m.start(2) != -1) 
     m.appendReplacement(buf, "made by Paul"); 
} 
m.appendTail(buf); 
System.out.println(buf.toString()); // prints: This Edit ToolBar is a made by Paul 

さらに動的なバージョンは、this other answerで見ることができます。

+0

ありがとう! Andreasに:あなたの方法は、部分文字列を置換するための非常に速い方法ですか? – HelloCW

+0

'indexOf()'ループは、正しく実行された場合、少し速いかもしれません。これは簡単であり、依然としてあなたの非常に長い入力を1回だけ検索します。これは主な問題です。 – Andreas

関連する問題