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

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

Barbara Streisand
リリース: 2024-11-04 07:41:31
オリジナル
443 人が閲覧しました

How can I efficiently replace multiple substrings in a string using Java?

文字列内の複数の部分文字列の置換: 効率的なアプローチ

文字列内の複数の部分文字列の置換は、さまざまなプログラミング シナリオで一般的なタスクとなる可能性があります。各部分文字列に対して String.replace を繰り返し使用するのは簡単そうに見えますが、大きな文字列の場合や、多数の置換ペアを処理する場合には非効率的になる可能性があります。

この制限を克服するには、java.util を利用するより効率的なアプローチが必要です。 regex.Matcher クラス。正規表現を使用して複数の部分文字列を効率的に置換できます。

次の手順は、部分文字列置換に Matcher を使用する方法の概要です。

  1. 部分文字列 (キー) とその置換 (値) のペア。
  2. ​​
  3. 代替文字列と一致する正規表現パターンを作成します。
  4. パターンをコンパイルしてマッチャーを作成します。
  5. Matcher を使用して、入力文字列内の一致を検索します。
  6. 一致の反復中に置換テキストを StringBuffer に追加します。
  7. 最後の一致の後に残りのテキストを追加します。

このアプローチの例を以下に示します。マップからの複数のトークンを指定された文字列に置き換えます。

<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>
ログイン後にコピー

Matcher を使用すると、正規表現のコンパイルが 1 回行われ、マッチングが行われます。また、置換プロセスは入力文字列に対して効率的に実行されるため、特に大きな文字列や複数の文字列を扱う場合に、パフォーマンスが大幅に向上します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート