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 № 1o \
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