2016-02-08 59 views
0

我使用開源與此OCDE錯誤的replaceAll與ESCP

private String undoEscape(String searchTerm) { 
     String specialChars = "+-&|!(){}[]^\"~:\\"; 
     for (int i = 0; i < specialChars.length(); i++) { 
      String character = specialChars.substring(i, i + 1); 
      String escaped = "\\" + character; 
      searchTerm = searchTerm.replaceAll(Pattern.quote(escaped), character); 
     } 
     return searchTerm; 
    } 

的情況下,該字符= \在檢查= \

逃脫= \\ - 在檢查= \

searchTerm \\ n = in inspect = \ n

我得到錯誤 出了什麼問題?

java.lang.StringIndexOutOfBoundsException: String index out of range: 1 
    at java.lang.String.charAt(String.java:658) 
    at java.util.regex.Matcher.appendReplacement(Matcher.java:762) 
    at java.util.regex.Matcher.replaceAll(Matcher.java:906) 
    at java.lang.String.replaceAll(String.java:2162) 
    at org 
+0

你是什麼錯誤?你可以添加錯誤堆棧嗎? –

+0

你到底想做什麼,這有什麼問題? – Hackerdarshi

+0

澄清你用什麼字符串作爲輸入參數? – CroWell

回答

1

切換到replace(),這也取代所有出現,但不要求正則表達式:

private String unescape(String searchTerm) { 
    String specialChars = "+-&|!(){}[]^\"~:\\"; 
    for (char c : specialChars.toCharArray()) { 
     String character = String.valueOf(c); 
     String escaped = "\\" + character; 
     searchTerm = searchTerm.replace(escaped, character); 
    } 
    return searchTerm; 
}