Java の String Replace メソッドが予期しない動作をする
Java では、String replace メソッドは、出現した部分文字列を文字列に置換するためによく使用される関数です。新しい文字列。ただし、ユーザーは、replace メソッドが誤動作していると思われる状況に遭遇することがあります。
次のコード スニペットを考えてみましょう:
String delimiter = "\*\*"; String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>"; Map<String, String> mp = new HashMap<>(); mp.put("USERNAME", "User A"); mp.put("PASSWORD", "B"); for (Entry<String, String> entry : mp.entrySet()) { html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue()); }
このコードの目的は、USERNAME と USERNAME のプレースホルダーを置き換えることです。 HTML 文字列内の PASSWORD と、提供されたマップの対応する値。ただし、実行時には、元の HTML 文字列 html は変更されないため、違反が発生します。
問題を理解する
問題を理解するには、文字列が次のことを覚えておく必要があります。 Java では不変です。つまり、その場で変更することはできません。文字列の replace メソッドは、変更された値を含む新しい String オブジェクトを返します。私たちのコードでは、replace メソッドの結果を取得して元の html 変数に代入していません。その結果、変更は元の文字列に適用されません。
解決策
この問題を解決するには、replace メソッドの結果をキャプチャし、それを HTML 変数に割り当て直します:
html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue());
この変更により、コードは HTML 文字列を必要な置換値で正しく更新するようになります。
以上がJava String Replace メソッドが文字列を更新しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。