java - significado - String.split() en un meta carácter+
replaceall java special characters (3)
Tuve un problema similar con regex = "?"
. Sucede para todos los caracteres especiales que tienen algún significado en una expresión regular. Por lo tanto, debe tener "//"
como prefijo para su expresión regular.
rightside = rightside.replaceAll("//+", " +");
Estoy haciendo un programa simple que tratará con ecuaciones de una entrada de cadena de la ecuación. Cuando lo ejecuto, sin embargo, obtengo una excepción al intentar reemplazar el "+" con un "+" para que pueda dividir la cadena en los espacios. ¿Cómo debo ir usando
¿La cadena replaceAll método para reemplazar estos caracteres especiales? Abajo esta mi codigo
Excepción en el subproceso "main" java.util.regex.PatternSyntaxException: metamol carácter colgando ''+'' cerca del índice 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
acepta una expresión regular como su primer argumento.
+
es un carácter especial que denota un cuantificador que significa una o más apariciones . Por lo tanto, debe escaparse para especificar el carácter literal +
:
rightside = rightside.replaceAll("//+", " +");
(Las cadenas son inmutables, por lo que es necesario asignar la variable al resultado de replaceAll
);
Una alternativa a esto es usar una clase de caracteres que elimine el estado del metacarácter:
rightside = rightside.replaceAll("[+]", " +");
La solución más simple sería utilizar el método de replace
que usa literales de String
no regex:
rightside = rightside.replace("+", " +");
String#replaceAll
espera la regex
como entrada, y +
no es un patrón adecuado, //+
sería un patrón. rightside.replaceAll("//+", " +");