无法替换java中的String出现?

时间:2014-04-22 08:09:40

标签: java

我在java中有一个StringBuilder对象,它存储了一些使用java程序动态创建的json格式数据。我想尝试做的是在StringBuilder对象中用String 2替换String one的出现(如果有的话)。我写了下面的代码来替换,但它不起作用?有什么理由或有效的方法来简单地替换字符串?

StringBuilder json = new StringBuilder ();

public void method1(){

String replacelater =   "   {\"name\":\" <font color=\\\"#FF0000\\\">"+funcvp_name4.trim()+" <\\/font> \",  \"children\":[  ";

callingmethod2();

String replacewith = "   {\"name\":\" <font color=\\\"#FF0000\\\">"+funcvp_name4.trim()+totalempforfuncvp+" <\\/font> \",  \"children\":[  ";

String jsonnew = json.toString();
jsonnew.replaceFirst(replacelater, replacewith);

json.setLength(-1);
json.append(jsonnew);
}

错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 2
   {"name":" <font color=\"#FF0000\">(7H Cost 806) <\/font> ",  "children":[  
  ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.closure(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceFirst(Unknown Source)
    at CreateChart.iterateFuncVPNamesFromArrayList(CreateChart.java:496)
    at CreateChart.getDataFromEMPHCForFuncVp(CreateChart.java:110)
    at CreateChart.main(CreateChart.java:964)

1 个答案:

答案 0 :(得分:0)

您的代码有两个主要问题。首先,replaceFirst的第一个参数被视为正则表达式,因此反斜杠和大括号之类的东西是元字符而不是要搜索的文字内容 - 以匹配您需要使用replaceFirst的文字字符串{ {1}}。

其次java中的字符串是不可变的 - Pattern.quote不会修改它所调用的字符串,它会将结果作为新字符串返回。

replaceFirst

或者,String jsonnew = json.toString().replaceFirst( Pattern.quote(replacelater), replacewith); 方法将其第一个参数视为文字字符串而不是正则表达式,但它将替换所有次出现,而不仅仅是第一次出现。