无法在 java 中通过 String.replaceAll 替换转义字符



我正在尝试使用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

最新更新