使用String.replaceAll()方法时出现非法重复异常

时间:2017-01-19 11:01:00

标签: java regex

我有以下代码:

    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;),上面的代码可以毫无问题地工作。

1 个答案:

答案 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); }); } }]); 方法使用正则表达式,$timeoutreplaceAll具有特殊含义。如果您使用{代替它们,则将其视为普通字符串,并且没有此类问题。