2012-09-21 32 views
0

我正在嘗試使用String.replaceAll替換\,並在此過程中得到一個異常。這裏是我的代碼:無法通過java中的String.replaceAll替換轉義字符

String str = "1^\\"; 
    System.out.println("\nInitial string length: "+str.length()+ " Initial String is:  "+str); 
    String temp = str.replaceAll("[&@;^\\]",""); 

這是輸出:

Initial string length: 3 Initial String is: 1^\ 

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character  class near index 6 
[&@;^\] 
^
at java.util.regex.Pattern.error(Pattern.java:1713) 
at java.util.regex.Pattern.clazz(Pattern.java:2254) 
at java.util.regex.Pattern.sequence(Pattern.java:1818) 
at java.util.regex.Pattern.expr(Pattern.java:1752) 
at java.util.regex.Pattern.compile(Pattern.java:1460) 
at java.util.regex.Pattern.<init>(Pattern.java:1133) 
at java.util.regex.Pattern.compile(Pattern.java:823) 
at java.lang.String.replaceAll(String.java:2190) 

回答

5

\\轉義由字符串字面量吞噬,所以你解析爲一個正則表達式的字符串實際上是[&@;^\]

\]在正則表達式中轉義],所以你有一個unclosed的字符類。

您需要雙重轉義\;一次爲字符串文字,一次爲正則表達式。

+0

謝謝SLaks ...我做了這個修改String temp = str.replaceAll(「[&@;^\\\\」「,」「);它的工作。 – user1601302

+0

不客氣。你應該通過點擊空心支票來接受這個答案。 – SLaks

3

字符串和正則表達式的轉義字符是相同的。這意味着要獲得

\\\\ - in the String 
\\ - in the regex 
\ - means 
相關問題