Java Chaîne ReplaceAll méthode donnant illégal de la répétition de l'erreur?
J'ai une chaîne de caractères et lorsque j'essaie d'exécuter le replaceAll
méthode, j'obtiens cette erreur étrange:
String str = "something { } , op";
str = str.replaceAll("o", "\n"); //it works fine
str = str.replaceAll("{", "\n"); //does not work
et j'ai une erreur étrange:
Exception in thread "main" java.util.regex.PatternSyntaxException:
Illegal repetition {
Comment puis-je remplacer les occurrences de "{"
?
Vous devez vous connecter pour publier un commentaire.
Un
{
est une regex méta-caractère utilisé pour la gamme de répétitions{min,max}
. Pour correspondre à un littéral{
vous avez besoin de s'échapper par le précédent avec un\\
:Si vous avez vraiment l'intention de remplacer les caractères simples et pas regexes (qui est ce que vous semblez vouloir faire ici), vous devez utiliser
.replace()
, pas.replaceAll()
. En dépit de son nom,.replace()
va remplacer TOUTES les occurrences, et pas seulement le premier.Et dans le cas où vous vous demandez,
String
implémenteCharSequence
, donc.replace("{", "\n")
fonctionne..replace()
est remplacer toutes les occurrences en dépit de son nom!Échapper:
Cela est nécessaire, car le premier argument de
replaceAll()
est un expression régulière, et{
a une signification spéciale dans la Java des expressions régulières (c'est un répétition opérateur, d'où le message d'erreur).