Chaîne.split() à un méta-caractère +
je fais un programme simple qui traitera des équations à partir d'une entrée de chaîne de l'équation Quand je l'exécute, cependant, j'obtiens une exception parce que j'essaie de remplacer le " +" par un " +" pour que je puisse fendre la chaîne aux espaces. Comment dois-je aller sur l'aide de
la chaîne replaceAll méthode pour remplacer ces caractères spéciaux? Ci-dessous est mon code
Exception in thread "main" java.util.regex.PatternSyntaxException: Baldling meta character ' + ' near index Zero + ^
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);
3 réponses
replaceAll
accepte une expression régulière comme premier argument.
+
est un caractère spécial qui dénote un quantificateur sens une ou plusieurs occurrences de. Par conséquent, il doit être échappé pour spécifier le caractère littéral +
:
rightside = rightside.replaceAll("\+", " +");
(les chaînes de caractères sont immuables, il est donc nécessaire d'attribuer la variable au résultat de replaceAll
);
Une alternative est d'utiliser un classe de caractères qui supprime le caractère de remplacement statut:
rightside = rightside.replaceAll("[+]", " +");
la solution La plus simple serait d'utiliser le replace
méthode qui utilise des regex String
littéraux:
rightside = rightside.replace("+", " +");
j'ai eu le même problème avec regex = "?"
. Cela se produit pour tous les caractères spéciaux qui ont un certain sens dans un regex. Si vous avez besoin d'avoir "\"
comme préfixe à votre regex.
rightside = rightside.replaceAll("\+", " +");
String#replaceAll
attend regex
en entrée, et +
n'est pas bon modèle, \+
serait le modèle. rightside.replaceAll("\+", " +");