Test: Descubre qué bootcamp es para ti

whatsapp keepcoding

¿Cómo usar java.util.regex.Matcher para buscar coincidencias en cadenas en Java?

| Última modificación: 10 de enero de 2025 | Tiempo de Lectura: 3 minutos

No quiero sonar exagerado, pero la clase java.util.regex.Matcher es como usar un detector de metales. En serio, es que te da la herramienta para encontrar justo lo que buscas en una cadena de texto, sin importar lo enterrado que esté. Si también quieres ser muy preciso a la hora de buscar patrones específicos en un texto voy a guiarte para que aprendas a usar esta clase de Java como todo un profesional. Yo te enseñaré a encontrar coincidencias en cadenas y a explorar sus métodos más útiles con varios ejemplos que he preparado para ti.

java.util.regex.Matcher

¿Qué es java.util.regex.Matcher?

Para que te quede más fácil de entender, java.util.regex.Matcher hace lo mismo que un cazador de tesoros, solo que tú tienes que definir el mapa (o sea el patrón) y ya él se encarga de buscar los tesoros escondidos (las coincidencias) en tu texto.

Además, crear un Matcher es muy fácil. Solo tienes que invocar el método matcher() de un objeto Pattern. Una vez creado, puedes usar métodos como matches(), find() y lookingAt() para realizar diferentes tipos de coincidencias.

Lo grandioso es que con esta clase puedes localizar coincidencias, porque lo que hace Matcher es usar el patrón definido por Pattern y encuentra todas las ocurrencias en el texto que coinciden con ese patrón. De hecho también puedes acceder a los resultados que encontró y reemplazar, extraer o manipular el texto que coincidió con el patrón.

Conoce los métodos principales de java.util.regex.Matcher y sus respectivos usos

Métodos de coincidencia

  • matches(): Se encarga de verificar si todo el texto coincide con el patrón.
  • lookingAt(): Este comprueba si el inicio del texto coincide con el patrón.
  • find(): Con este buscas las subsecuencias que coincidan con el patrón.

Ejemplo: Aquí te pongo un reto, quiero que encuentres las palabras que comiencen con “pro”.

Pattern pattern = Pattern.compile("\\bpro\\w*");
Matcher matcher = pattern.matcher("programar es divertido, pero procesar datos es complejo.");
while (matcher.find()) {
System.out.println("Coincidencia: " + matcher.group());
}

Mira la salida:

Coincidencia: programar
Coincidencia: procesar

Métodos de índice

  • start(): Ten presente que este te devuelve el índice de inicio de la coincidencia.
  • end(): Y este te devuelve el índice del final de la coincidencia.

Ejemplo: Ahora quiero que encuentres las posiciones de todas las apariciones de “java”.

Pattern pattern = Pattern.compile("java");
Matcher matcher = pattern.matcher("java es genial. Amo java y sus frameworks.");
while (matcher.find()) {
System.out.println("Inicio: " + matcher.start() + ", Fin: " + matcher.end());
}

Observa la salida:

Inicio: 0, Fin: 4
Inicio: 22, Fin: 26

Métodos de reemplazo

  • replaceAll(String replacement): Con este podrás reemplazar todas las coincidencias con un texto dado.
  • replaceFirst(String replacement): Este reemplaza solo la primera coincidencia.

Ejemplo: Vas a reemplazar los números por “[número]”.

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hay 3 gatos y 12 perros.");
String resultado = matcher.replaceAll("[número]");
System.out.println(resultado);

Esta es la salida:

Hay [número] gatos y [número] perros.

Ejemplos avanzados para aprender a usar java.util.regex.Matcher

Contando coincidencias

¿Quieres saber cuántas veces aparece un patrón en una cadena? Usa un bucle con find() como te muestro aquí:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat, catapult, catalogue, concatenation");
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("El patrón aparece " + count + " veces.");

Mira la salida:

El patrón aparece 4 veces.

Validando entradas

De hecho, puedes usar matches() para validar formatos, como correos electrónicos o números de teléfono.

Pattern pattern = Pattern.compile("\\w+@\\w+\\.\\w+");
Matcher matcher = pattern.matcher("[email protected]");
if (matcher.matches()) {
System.out.println("Correo válido.");
} else {
System.out.println("Correo no válido.");
}

Observa la salida:

Correo válido.

Usando grupos de captura

Los grupos permiten extraer partes específicas del texto.

Pattern pattern = Pattern.compile("(\\d+)-(\\w+)");
Matcher matcher = pattern.matcher("123-abc");
if (matcher.find()) {
System.out.println("Número: " + matcher.group(1));
System.out.println("Texto: " + matcher.group(2));
}

Salida:

Número: 123
Texto: abc

Aprovecha java.util.regex.Matcher con estos consejos

  1. Define patrones claros: Utiliza comentarios o documenta expresiones regulares complejas.
  2. Precompila patrones reutilizados: Ahorrarás recursos y mejorarás el rendimiento.
  3. Prueba tus patrones: Usa herramientas como regex101 para depurar tus expresiones.
  4. Ten cuidado con las entradas no confiables: Siempre valida las entradas antes de procesarlas.

Con java.util.regex.Matcher, tienes en tus manos una gran herramienta para buscar y manipular texto en Java. Ya sea que quieras validar formularios, analizar datos o construir filtros complejos, este conocimiento es clave para destacar en el mundo IT.

¿Quieres aprender más y convertirte en un profesional Java? En el Bootcamp de Java Full Stack de KeepCoding aprenderás desde los fundamentos hasta técnicas avanzadas que te prepararán para una carrera exitosa en tiempo récord. ¡Inscríbete ahora y transforma tu futuro!

Posts más leídos