Hola:
Muchas veses cuando desarrollamos sistemas nos topamos con problemitos como el siguiente:
Queremos extraer los caracteres o fracmentos en rojo de un String como este:
2o. Marzo-Abril
Seria una buena idea hacerlo con StringTokenizer pero tambien hay otra manera sensilla y elegante para hacerlo, solo tenemos que saber algo de expresiones, por ejemplo
para el caracter 2 bien podria ser un 3,4,5,6... por lo tanto la expresion para esta seria que siempre este caracter es un digito \d esta es la expresion para un digito
Marzo y Abril bien podrian ser Enero y Febrero, por lo tanto sabremos que siempre con palabras, me refiero que puede ser [a-z] y [A-Z], aqui se puede ocupar mas de una expresion pero para este ejemplo ocuparemos \w
Por lo tanto nuestra expresion completa seria esta:
String input = "2o. Marzo-Abril";
String expr="(\\d)o.\\s(\\w+)-(\\w+)";
Los parentesis son porque queremos obtener tres grupos que cumplan con la expresion que esta dentro de ellos.
String input = "2o. Marzo-Abril";
String expr="(\\d)o.\\s(\\w+)-(\\w+)";
Scanner s = new Scanner(input);
s.findInLine(expr);
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(i+" "+result.group(i));
s.close();
El resultado seria este:
1 2
2 Marzo
3 Abril
Pero que pasaria si el input fuera este:
String input = "40o. Marzo-Abril";
1 0
2 Marzo
3 Abril
en el grupo 1 obtenemos el 0 pero nosotros esperariamos un 40, pero es logico
puesto que nuestre expresion solo es \d que espera solo una posicion de un digito, para que sean varios necesitariamos \d+
String input = "40o. Marzo-Abril";
String expr="(\\d+)o.\\s(\\w+)-(\\w+)";
Scanner s = new Scanner(input);
s.findInLine(expr);
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(i+" "+result.group(i));
s.close();
Resultados:
1 40
2 Marzo
3 Abril
Saludos.
No hay comentarios.:
Publicar un comentario