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);
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("+", " +");
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("\\+", " +");
String#replaceAll
Attend regex
comme entrée, et +
N'est pas un modèle approprié, \\+
Serait un modèle. rightside.replaceAll("\\+", " +");