我有以下代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
XML文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<hashmap>
<request>
<username>{username}</username>
<password>{password}</password>
</request>
</hashmap>
Run Code Online (Sandbox Code Playgroud)
抛出异常:非法重复.但是我没有办法逃避"{}"字符,因为我得到的方法是使用getKey()和getValue()方法,它按预期返回{password}和{username}.然而它打破了String replace = h.replaceValues(h.xmlToString(), hmap).有解决方案吗?值得一提的是,如果我用随机值替换{password}(例如"password1"),上面的代码可以正常工作.
该replaceAll方法使用正则表达式,与{和}具有特殊的意义.如果你使用replace(String, String)它们,它们被视为正常的字符串,并且没有这样的问题.