我有以下代码:
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>
抛出异常:非法重复。但我无法逃脱&#34; {}&#34;字符,因为我得到的方法是使用getKey()和getValue()方法,它按预期返回{password}和{username}。但它会在String replace = h.replaceValues(h.xmlToString(), hmap)
行中断。有解决方案吗?值得一提的是,如果我用随机值替换{password}(例如&#34; password1&#34;),上面的代码可以毫无问题地工作。
答案 0 :(得分:6)
$scope.getWeather= function(){
$http({
url: "http://api.openweathermap.org/data/2.5/forecast/daily?AP&units=metric",
method: "GET",
params: {q: $scope.city, cnt:2}
})
.then(function(response){
$timeout(function(){
$scope.weatherResult = response.data;
}, 0);
});
}
}]);
方法使用正则表达式,$timeout
和replaceAll
具有特殊含义。如果您使用{
代替它们,则将其视为普通字符串,并且没有此类问题。