[英]Unable to replace String occurence in java?
我在Java中有一個StringBuilder對象,該對象存儲一些使用Java程序動態創建的json格式的數據。 我正在嘗試做的是將StringBuilder對象中的字符串一替換為字符串二。 我寫了下面的代碼來替換,但無法正常工作? 有什么理由或有效的方法來簡單地替換字符串?
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)
您的代碼有兩個主要問題。 首先, replaceFirst
的第一個參數被視為正則表達式,因此反斜杠和花括號之類的字符是元字符,而不是要搜索的文字對象-若要將文字字符串與replaceFirst
匹配, replaceFirst
需要使用Pattern.quote
。
其次,java中的字符串是不可變的replaceFirst
不會修改調用它的字符串,它會以新字符串的形式返回結果。
String jsonnew = json.toString().replaceFirst(
Pattern.quote(replacelater), replacewith);
或者, replace
方法將其第一個參數視為文字字符串而不是正則表達式,但它將替換所有出現的內容,而不僅僅是第一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.