2017-12-22 4 views
6

5〜10個の置換文字を使用するシナリオでは、stringbuilderを使用する必要があります。Java String.replace()またはStringBuilder.replace()

String someData = "......"; 
someData = someData.replaceAll("(?s)<tag_one>.*?</tag_one>", ""); 
someData = someData.replaceAll("(?s)<tag_two>.*?</tag_two>", ""); 
someData = someData.replaceAll("(?s)<tag_three>.*?</tag_three>", ""); 
someData = someData.replaceAll("(?s)<tag_four>.*?</tag_four>", ""); 
someData = someData.replaceAll("(?s)<tag_five>.*?</tag_five>", ""); 
someData = someData.replaceAll("<tag_five/>", ""); 
someData = someData.replaceAll("\\s+", ""); 

ここでstringBuilderを使用すると違いがありますか?

+3

'replace'は正規表現を使用せず、' replaceAll'を使用してください。例えば 'string.replaceAll(..)。replaceAll(..)。replaceAll(..)' –

+2

うん、ReplaceFirstも使うことができます。 –

+1

の代わりに、なぜあなたは単一の正規表現を使用したくないのですか?私は多くの一般的な部分を参照してください –

答えて

8

StringBuilderを使用すると、ここでは有用な違いはありません。ここで

someData = someData.replaceAll("(?s)<tag_(one|two|three|four|five)>.*?</tag_\\1>", ""); 

は、\\1(one|two|etc)グループで捕獲されたのと同じものに一致します。

より良い改善は、単一の正規表現を使用することです。

+0

ええ、それはきちんとしています。あなたが提案した通りに変更するstringBuilderは必要ですか? –

+0

「StringBuilder」がここでどのような利点をもたらすと思いますか分かりません。 'StringBuilder'ではサポートされていない、正規表現の置き換えをしています。ちょうど 'String'に固執してください。 –

+0

うん、それは正しいです。 –

関連する問題