Saltar al contenido principal

Clases de Java

En Java, las clases necesarias para trabajar con expresiones regulares se encuentran en el paquete java.util.regex. Los patrones de búsqueda se trabajan con las clases Pattern y Matcher.

Para utilizarlas es necesario importarlas:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

Una expresión regular debe ser compilada antes de ser utilizada. Para ello, se utiliza la clase Pattern y su método compile():

String regex = "[a-zA-Z]+";
Pattern pattern = Pattern.compile(regex);

Para poder buscar las ocurrencias en una cadena de texto en base a una expresión regular debemos utilizar el método matcher() de Pattern sobre el objeto que nos ha devuelto el método compile() para obtener un nuevo objeto que podremos utilizar para analizar los resultados.

Matcher matcher = pattern.matcher("The String class represents character strings.");

El método matcher() de Pattern nos devuelve un objeto de la clase Matcher, el cual podemos utilizar para analizar las ocurrencias encontradas en la cadena de texto que le hemos indicado.

A continuación, vamos a ver algunos ejemplos completos para ver cómo se utilizan estas clases.

Ejemplos

Buscar si hay una ocurrencia de re en una cadena de carácteres:

String str1 = "The String class represents character strings.";
String str2 = "re";

// El método matches() de String devolverá true solo si coincide con toda la cadena.
str1.matches("re"); // false
str2.matches("re"); // true

// Para buscar si existe "re" e una cadena de texto donde hay más carácteres, se debe añadir .* al
// principio y al final de la expresión regular.
str1.matches(".*re.*"); // true
str2.matches(".*re.*"); // true

Contar el número de ocurrencias de re en una cadena de carácteres:

String str = "The String class represents character strings.";

Pattern pattern = Pattern.compile("re"); // Compilación de la expresión regular.
Matcher matcher = pattern.matcher(str); // Búsqueda de las ocurrencias según la expresión regular.

int count = 0;

// Con el método find() vamos recorriendo las diferentes ocurrencias.
// Devuelve true si hay una ocurrencia. Si lo volvemos a llamar una segunda vez y devuelve true es
// que hay una segunda ocurrencia. Así sucesivamente hasta que devuelve false.
while(matcher.find()) {
count++;
}

System.out.println(count); // 2

Contar el número de ocurrencias de ra, re, ri, ro y ru en una cadena de carácteres:

String str = "The String class represents character strings.";

Pattern pattern = Pattern.compile("r[aeiou]"); // Compilación de una expresión regular.
Matcher matcher = pattern.matcher(str);

int count = 0;

while(matcher.find()) {
count++;
}

System.out.println(count); // 5

Mostrar las ocurrencias de ra, re, ri, ro y ru en una cadena de carácteres:

String str = "The String class represents character strings.";

Pattern pattern = Pattern.compile("r[aeiou]");
Matcher matcher = pattern.matcher(str);


while(matcher.find()) {
// Tras la llamada del método find(), podemos utilizar start() y end() para obtener los índices
// de inicio y fin de la ocurrencia en la cual estamos.
// Funcionamiento:
// 1. Llamada a find() por primera vez para situarse en la primera ocurrencia. Devuelve true si
// la hay. Si devuelve false, no se continúa.
// 2. LLamada a start() y end() para obtener los índices de la primera ocurrencia.
// 3. Segunda llamada a find() para situarse en la segunda ocurrencia. Devuelve true si la hay.
// Si devuelve false, no se continúa.
// 4. LLamada a start() y end() para obtener los índices de la segunda ocurrencia.
// 5. Continuar...
int start = matcher.start();
int end = matcher.end();

// Extraemos la ocurrencia utilizando los índices de inicio y fin y substring().
String match = str.substring(start, end);

// Mostramos la información.
System.out.printf("\"%s\" de la posición %d a la posición %d. %n", match, start, end);
}

// El código anterior muestra las siguiente líneas:
// "ri" de la posición 6 a la posición 8.
// "re" de la posición 17 a la posición 19.
// "re" de la posición 20 a la posición 22.
// "ra" de la posición 31 a la posición 33.
// "ri" de la posición 40 a la posición 42.

Reemplazar todas las ocurrencias de ra, re, ri, ro y ru por ** en una cadena de carácteres:

String str = "The String class represents character strings.";

// Substituye todas las ocurrencias en el texto por dos asteriscos.
str = str.replaceAll("r[aeiou]", "**");

System.out.println(str); // The St**ng class **p**sents cha**cter st**ngs.