我正在尝试使用\
替换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)
答案 0 :(得分:5)
字符串文字正在吞噬\\
转义,因此您正在解析为正则表达式的字符串实际上是[&@;^\]
。
\]
会转义]
,因此您有一个未闭合的字符类。
你需要双重逃避\
;一次用于字符串文字,一次用于正则表达式。
答案 1 :(得分:3)
String和regex的转义字符是相同的。这意味着获得
\\\\ - in the String
\\ - in the regex
\ - means