Problème de correspondance de modèle de chaîne en Java

Dans mon programme quand j’utilise

line.replaceAll("(", "_"); 

J’ai eu une RuntimeException :

  at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.accept(Unknown Source) at java.util.regex.Pattern.group0(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.comstack(Unknown Source) at java.util.regex.Pattern.(Unknown Source) at java.util.regex.Pattern.comstack(Unknown Source) at java.lang.Ssortingng.replaceAll(Unknown Source) at Processing.processEarly(Processing.java:95) at Processing.main(Processing.java:34) 

Y a-t-il une raison? Comment pouvons-nous l’éviter?

Le premier argument de ssortingng.replaceAll est une expression régulière, pas simplement une chaîne. Le crochet ouvrant à gauche est un caractère spécial dans une expression régulière, vous devez donc y échapper:

 line.replaceAll("\\(", "_"); 

Sinon, puisque vous remplacez un seul caractère, vous pouvez utiliser ssortingng.replace comme ssortingng.replace :

 line.replace('(', '_'); 

Le message d’erreur au-dessus de la trace de la stack est (quelque peu) utile:

Exception dans le thread “main” java.util.regex.PatternSyntaxException: groupe non fermé proche de l’index 1 (^

(C’est ce que je reçois en Java 6.) Il mentionne “regex”, “group” et la parenthèse. Si vous ne pouvez pas voir ce message, vous devriez vérifier comment vous enregistrez / attrapez / affichez des exceptions. Cela pourrait vous éviter des ennuis dans le futur.