我在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)
答案 0 :(得分:0)
您的代码有两个主要问题。首先,replaceFirst
的第一个参数被视为正则表达式,因此反斜杠和大括号之类的东西是元字符而不是要搜索的文字内容 - 以匹配您需要使用replaceFirst
的文字字符串{ {1}}。
其次java中的字符串是不可变的 - Pattern.quote
不会修改它所调用的字符串,它会将结果作为新字符串返回。
replaceFirst
或者,String jsonnew = json.toString().replaceFirst(
Pattern.quote(replacelater), replacewith);
方法将其第一个参数视为文字字符串而不是正则表达式,但它将替换所有次出现,而不仅仅是第一次出现。