2012-09-27 29 views
2

我想和值String.replaceAll()的問題

fm.get('Order__' 

我使用類似語法來替代的

fm.get('Order# 

都精確匹配在一個漫長的字符串:

String calcStr = "return fm.get('Order#');"; 
    String fname = "Order#"; 
    String validfName = "Order__"; 

    String modifiedCalc1 = calcStr.replaceAll("fm.get('"+fname+"\\b", "fm.get('"+validfName); 
    System.out.println(modifiedCalc1); 

但我得到模式錯誤。

Exception in thread "main" java.util.regex.PatternSyntaxException: 
    Unclosed group near index 18 
    \bfm.get('Order#\b 
      ^
at java.util.regex.Pattern.error(Unknown Source) 
at java.util.regex.Pattern.accept(Unknown Source) 

回答

3

您需要轉義左括號和點。

刪除此特定情況下的末尾\b

String modifiedCalc1 = calcStr.replaceAll("fm\\.get\\('"+fname, "fm.get('"+validfName); 
1

如果你想使用需要一個正則表達式,你可以使用Pattern.quote(式樣側)的API,並Matcher.quoteReplacement(用於替代側),以取代文字字符串:

calcStr.replaceAll(Pattern.quote("fm.get('Order#"), 
        Matcher.quoteReplacement("fm.get('Order__")); 
0

在這種情況下,似乎沒有真正需要的正則表達式功能。

所以普通的字符串替換可以使用更加高效:

String modifiedCalc1 = calcStr.replace("fm.get('"+fname, "fm.get('"+validfName);