-1
を使用しているとき、私は、次のコードを持っている:違法繰り返し例外がString.replaceAll()メソッド
public String replaceValues(String string, HashMap hashMap){
TestHashMap h = new TestHashMap();
String str = new String(h.xmlToString());
Iterator iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()){
HashMap.Entry pair = (HashMap.Entry)iterator.next();
str = str.replaceAll(pair.getKey().toString(), pair.getValue().toString());
}
return str;
}
public static void main(String[] args) {
TestHashMap h = new TestHashMap();
HashMap<String, String> hmap = new HashMap<String, String>();
hmap.put("{username}", "Tudor");
hmap.put("{password}", "Tester123");
System.out.println(hmap);
String replace = h.replaceValues(h.xmlToString(), hmap);
System.out.println(replace);
}
XMLファイルには、次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<hashmap>
<request>
<username>{username}</username>
<password>{password}</password>
</request>
</hashmap>
これは例外をスロー:不正繰り返し。しかし、{}}文字をエスケープする方法はありません。なぜなら、それらを取得する方法は、{password}と{username}を期待通りに返すgetKey()メソッドとgetValue()メソッドであるからです。しかし、それはString replace = h.replaceValues(h.xmlToString(), hmap)
行で壊れます。どんな解決策もお願いしますか? {password}をランダムな値(例えば "password1")に置き換えると、上記のコードは問題なく動作することに言及する価値があります。
'replaceAll()'という混乱した名前にもかかわらず、 'replace()'の "すべてではない"振る舞いを暗示していますが、実際にはreplace()はすべての置換を置き換えます。 – Bohemian
'Pattern.quote(String)'への参照を追加することもできますが、正規表現を必要としないため、 'replace(String、String)'を使うほうが良い解決法でしょう。 –
答えをありがとう! – Tudor