ホームページ >Java >&#&チュートリアル >Java で複数の部分文字列を効率的に置換するにはどうすればよいですか?

Java で複数の部分文字列を効率的に置換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 05:35:29915ブラウズ

How to Efficiently Replace Multiple Substrings in Java?

Java での複数の部分文字列の効率的な置換

文字列内の複数の部分文字列の置換は、さまざまな目的で必要です。従来の string.replace メソッドは単純な場合には十分ですが、広範な文字列や多数の置換を処理するには不十分な場合があります。

この問題に取り組む効率的なアプローチは、java.util.regex.Matcher クラスを利用することです。 。これには初期コンパイル時間が必要ですが、大規模な入力や反復的な検索パターンには有益であることがわかります。

次のシナリオを考えてみましょう:

問題: 複数のトークンを置き換えます (例: " cat" と "beverage") と、指定された文字列内の対応する値 (例: "Garfield" と "coffee") を組み合わせます。

解決策:

  1. 置換トークンを保存するマップを作成します。
  2. トークンのキーを使用してパターン文字列を構築します。
  3. パターンをコンパイルして Matcher インスタンスを作成します。
  4. Matcher を使用して、入力文字列を処理します。
  5. 置換を StringBuffer に追加します。
<code class="java">Map<String, String> tokens = new HashMap<>();
tokens.put("cat", "Garfield");
tokens.put("beverage", "coffee");

String template = "%cat% really needs some %beverage%.";

// Create pattern of the format "%(cat|beverage)%"
String patternString = "%(" + StringUtils.join(tokens.keySet(), "|") + ")%";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);

StringBuffer sb = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);

System.out.println(sb.toString());</code>

このアプローチを利用すると、初期コンパイル コストが、小さい入力サイズまたは頻繁に変更される検索の利点を上回ります。パターン。ただし、大規模な文字列や多数の置換を使用する場合、効率が大幅に向上します。

以上がJava で複数の部分文字列を効率的に置換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。