当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用String.replaceAll()方法时出现非法重复异常》经验,为你挑选了1个好方法。

我有以下代码:

    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 hmap = new HashMap();
    hmap.put("{username}", "Tudor");
    hmap.put("{password}", "Tester123");
    System.out.println(hmap);
    String replace = h.replaceValues(h.xmlToString(), hmap);
    System.out.println(replace);
}

XML文件如下所示:



    
        {username}
        {password}
    

抛出异常:非法重复.但是我没有办法逃避"{}"字符,因为我得到的方法是使用getKey()和getValue()方法,它按预期返回{password}和{username}.然而它打破了String replace = h.replaceValues(h.xmlToString(), hmap).有解决方案吗?值得一提的是,如果我用随机值替换{password}(例如"password1"),上面的代码可以正常工作.



1> Kayaman..:

replaceAll方法使用正则表达式,与{}具有特殊的意义.如果你使用replace(String, String)它们,它们被视为正常的字符串,并且没有这样的问题.


尽管令人困惑的名称`replaceAll()`暗示`replace()`的"并非所有"行为,`replace()`实际上会替换所有出现的行为.
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有