web-dev-qa-db-fra.com

String.split () à un méta-caractère +

Je crée un programme simple qui traitera des équations à partir d'une entrée de chaîne de l'équation. Lorsque je l'exécute, cependant, j'obtiens une exception parce que j'essaie de remplacer le "+" par un "+" afin de pouvoir diviser la chaîne aux espaces. Comment dois-je utiliser

la chaîne replaceAll pour remplacer ces caractères spéciaux? Ci-dessous mon code

Exception dans le thread "principal" Java.util.regex.PatternSyntaxException: balancement du méta-caractère '+' près de l'index 0 + ^

 public static void parse(String x){
       String z = "x^2+2=2x-1";

       String[] lrside =  z.split("=",4);
       System.out.println("Left side: " + lrside[0] + " / Right Side: " + lrside[1]);
       String rightside = lrside[0];
       String leftside = lrside[1];

       rightside.replaceAll("-", " -");
       rightside.replaceAll("+", " +");
       leftside.replaceAll("-", " -"); leftside.replaceAll("+", " +");
       List<String> rightt = Arrays.asList(rightside.split(" "));
       List<String> leftt = Arrays.asList(leftside.split(" "));

       System.out.println(leftt);
       System.out.println(rightt);
32
apache

replaceAll accepte une expression régulière comme premier argument.

+ est un caractère spécial qui désigne un quantificateur signifiant une ou plusieurs occurrences . Par conséquent, il doit être échappé pour spécifier le caractère littéral +:

rightside = rightside.replaceAll("\\+", " +");

(Les chaînes sont immuables, il est donc nécessaire d'affecter la variable au résultat de replaceAll);

Une alternative à cela consiste à utiliser une classe de caractères qui supprime le statut du métacaractère:

rightside = rightside.replaceAll("[+]", " +");

La solution la plus simple serait d'utiliser la méthode replace qui utilise des littéraux non regex String:

rightside = rightside.replace("+", " +"); 
51
Reimeus

J'ai eu un problème similaire avec regex = "?". Cela se produit pour tous les caractères spéciaux qui ont une signification dans une expression régulière. Vous devez donc avoir "\\" comme préfixe de votre expression régulière.

rightside = rightside.replaceAll("\\+", " +");
3
Aniket Thakur

String#replaceAll Attend regex comme entrée, et + N'est pas un modèle approprié, \\+ Serait un modèle. rightside.replaceAll("\\+", " +");

1