我正在尝试使用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)
转
义\
被字符串文字吞噬,因此您解析为正则表达式的字符串实际上是[&@;^]
。
正则表达式中的]
转义]
,因此您有一个未闭合的字符类。
你需要对进行双重转义;一次用于字符串文字,一次用于正则表达式。
字符串和正则表达式的转义字符是相同的。 这意味着要得到
\\ - in the String
\ - in the regex
- means