/ / Não é possível substituir o caractere de escape através de String.replaceAll em java - java, regex

Não é possível substituir o caractere de escape através de String.replaceAll em java - java, regex

Eu estou tentando substituir um usando String.replaceAll e recebo uma Exceção enquanto faço isso. Aqui está o meu código:

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

Esta é a saída:

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)

Respostas:

5 para resposta № 1

o \ escapar está sendo engolido pela string literal, então a string que você está analisando como regex é na verdade [&@;^].

] em um regex escapa do ], então você tem uma classe de personagem não fechada.

Você precisa escapar duas vezes ; uma vez para o literal da string e uma vez para o regex.


3 para resposta № 2

O caractere de escape para String e regex é o mesmo. Isso significa conseguir

\\ - in the String
\ - in the regex
 - means