web-dev-qa-db-fra.com

Comment remplacer un caractère plus à l'aide de la méthode String.replaceAll de Java

Quelle est l'expression rationnelle correcte pour un caractère plus (+) en tant que premier argument (c'est-à-dire la chaîne à remplacer) de la méthode replaceAll de Java dans la classe String? Je ne peux pas obtenir la syntaxe correcte.

38
John Topley

Vous devez échapper le + pour l'expression régulière en utilisant \.

Cependant, Java utilise un paramètre String pour construire des expressions régulières, qui utilisent \ pour ses propres séquences d'échappement. Il faut donc échapper au \ lui-même:

"\\+"
83
toolkit

en cas de doute, laissez Java faire le travail pour vous:

myStr.replaceAll(Pattern.quote("+"), replaceStr);
31
james

Vous aurez besoin d'échapper au + avec un\et parce que\est lui-même un caractère spécial dans les chaînes Java, vous aurez besoin de l'échapper avec un autre \.

Donc, votre chaîne de regex sera définie comme "\\ +" dans le code Java.

C'est à dire. cet exemple:

String test = "ABCD+EFGH";
test = test.replaceAll("\\+", "-");
System.out.println(test);
14
Kris

Supposons que vous souhaitiez remplacer - par \\\-, utilisez:

 text.replaceAll("-", "\\\\\\\\-");
2
Ramnath

D'autres ont déjà indiqué la méthode correcte de:

  1. Échapper au + en tant que \\+
  2. Utilisation de la méthode Pattern.quote qui échappe à tous les méta-caractères de regex.

Une autre méthode que vous pouvez utiliser consiste à placer le + dans une classe de caractères. Beaucoup de méta-caractères regex (., *, + parmi beaucoup d'autres) sont traités littéralement dans la classe de caractères.

Donc vous pouvez aussi faire:

orgStr.replaceAll("[+]",replaceStr);

Ideone Link

2
codaddict

Si vous voulez une chaîne simple find-and-replace (c'est-à-dire que vous n'avez pas besoin de regex), il peut être plus simple d'utiliser le StringUtils de Apache Commons , qui vous permettrait d'écrire:

mystr = StringUtils.replace(mystr, "+", "plus");
2
Simon Nickerson
String str="Hello+Hello";   
str=str.replaceAll("\\+","-");
System.out.println(str);

OR

String str="Hello+Hello";   
str=str.replace(Pattern.quote(str),"_");
System.out.println(str);
0