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

use*_*302 0 java regex

我正在尝试替换\使用,String.replaceAll并在执行此操作时获得异常.这是我的代码:

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

这是输出:

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)
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

\\转义由字符串字面量吞噬,所以你解析为一个正则表达式的字符串实际上是[&@;^\].

\]在正则表达式中逃避],所以你有一个未闭合的角色类.

你需要双重逃脱\; 一次用于字符串文字,一次用于正则表达式.