Foros del Web » Programación para mayores de 30 ;) » Java »

expresion regular

Estas en el tema de expresion regular en el foro de Java en Foros del Web. Muy buenas. Tengo el siguiente código Java (Que llamo desde una jsp, para devolver el resultado a la jsp): Pattern patron = Pattern.compile("(88)"); Matcher m ...
  #1 (permalink)  
Antiguo 07/06/2008, 06:45
 
Fecha de Ingreso: marzo-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 0
expresion regular

Muy buenas. Tengo el siguiente código Java (Que llamo desde una jsp, para devolver el resultado a la jsp):

Pattern patron = Pattern.compile("(88)");
Matcher m = patron.matcher("asdf aaf 88 afe");
String s = m.replaceAll(getNumber("$0"));

donde:

public static String getNumber(String s) {
int a = Integer.parseInt(s) * 2;
return String.valueOf(a*2);
}

ante lo que tengo el siguiente error:

Exception in thread "main" java.lang.NumberFormatException: For input string: "$0"
at java.lang.NumberFormatException.forInputString(Unk nown Source)


¿Alguien sabe porqué? Si pongo m.replaceAll(22) ¡FUNCIONA!. Si getNumber devuelve directamente el parámetro (s), también funciona. Pero no entiendo porqué no funciona ahora. Según la expresión regular, recibe siempre la cadena "88". De hecho, si getNumber devuelve directamente s, es eso lo que devuelve. Pero da el error anterior.

¿Alguien sabe porque?

Gracias!
  #2 (permalink)  
Antiguo 08/06/2008, 21:03
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: expresion regular

Hola:

"$0" en java es "$0" y NO se reeemplaza el $0 por el primer resultado de la búsqueda. Para obtener ese trozo de cadena, debes hacer esto

Pattern patron = Pattern.compile("(88)");
Matcher m = patron.matcher("asdf aaf 88 afe");
m.find();
String subcadena = m.group(1); // en subcadena tienes ahora "88"

En "extraer partes de una cadena" tienes más detalles.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 11/06/2008, 07:07
 
Fecha de Ingreso: marzo-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: expresion regular

Hola chuidiang. Gracias por tu respuesta, veo que tendré que utilizar lo que tu me dices. Quería utilizar un replaceAll pues en uan sola linea había hecho todas las sustituciones sin hacer repetidas llamadas a find().

$0 no es numérico y es lógico que falle la conversión.

Pero no le veo sentido, pues la función getNumber si que recibe como parámetro el grupo encontrado (lo que tu hallarías usando Matcher.group()); pero solo funciona con operaciones entre strings y no suponiendo que viene un string y que luego queremos convertir a un entero.

Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:41.