Foro sobre Java SE > Reemplazo de caracteres especiales
He aquí el Error:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+++++++++
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at pruebaReactivos.separarReactivos.main(separarReactivos.java:19)
Guenas.
Prueba esto
String linea = "+ 1.0000 Mg+++++ + Ca+++ + 2.0000 Cl- + 6.0000 H2O";
String saux1 = "";
String saux2 = "";
int i;
int j;
for (i = 9; i > 1; i--) {
saux1 = "";
for (j = 0; j
Joder, lo corta
A ver si al menos escribe el cachito importante
String res=linea.replaceAll(saux1, saux2);
if(!res.equals(linea)) {
linea=res;
}
Lo acabo de solucionar! Venia a postearlo y vi tu respuesta. Al final tu solución da el mismo error, no se escapa del truco...jeje (a mi no se me habia ocurrido).
Solucion: he utilizado replace() en lugar de replaceAll().
for(i=9;i>1;i--){
saux1="";
for(j=0;j<i;j++){
saux1+="+";
}
saux2="+"+Integer.toString(j);
saux3=linea.replace(saux1,saux2);
System.out.println("Cambio :"+saux3);
linea=saux3;
}
Igualmente, no entiendo por qué replace() funciona y replaceAll() no!
replaceAll() utiliza el "+" y replace() no?
Guenas.
Pues no se. Yo probé tu primer intento con "\\+" y no petaba.
No hacia lo que debía porque faltaba la asignación, pero para el resto hacían lo mismo.
Un saludo
Hola a todos, soy nuevo por aquí. Les planteo mi problema...
Estoy haciendo un programa que coge reacciones químicas de este estilo:
"+ 1.0000 Mg+++ + 2.0000 Cl- + 6.0000 H2O"
(coge la cadena completa).
Donde pone "Mg+++" debería de poner "Mg+3" (las dos nomenclaturas son correctas, pero para lo que estoy haciendo necesito la segunda).
Puedo tener 3 signos "+" (como en este ejemplo), o incluso hasta 9 (que se traduciría en un "+9"). Pues bien, estoy haciendo un programa para intentar cambiar estas cadenas tal y como quiero.
Para hacerlo, he construido unos bucles que construyen la cadena de caracteres de signos "+" : la primera cadena de 9 signos seguidos, y disminuyendo hasta la ultima cadena de 2. Daría el siguiente resultado:
+++++++++
++++++++
+++++++
++++++
+++++
++++
+++
++
Cada cadena la busco en la reacción y la sustituyo según sea el caso utilizando un replaceAll(). El problema es que al ser el signo "+" un caracter especial, no me deja hacer este cambio.
Como podria solucionar este problema? Aqui les dejo el codigo:
String linea="+ 1.0000 Mg+++++ + 2.0000 Cl- + 6.0000 H2O";
String saux1="";
String saux2="";
int i;
int j;
for(i=9;i>1;i--){
saux1="";
for(j=0;j<i;j++){
saux1=saux1+"+"; //Cadena de signos. Primera cadena: "+++++++++"
}
saux2="+"+Integer.toString(j); //Cadena resultado. Para el primer caso: "+9"
linea.replaceAll(saux1,saux2); //Intento sustituir "+++++++++" por "+9".
}
PD: He intentado construir la cadena saux1 en el segundo bucle como saux1=saux1+"\\+". En ese caso compila, pero no hace el cambio...no se ya que hacer!
Gracias de antemano!