Menu
Coddy logo textTech

Coincidencia de Patrones con Regex

Parte de la sección Lógica y Flujo del Journey de Java de Coddy — lección 47 de 59.

Las clases Pattern y Matcher proporcionan herramientas potentes para operaciones de regex en Java. Primero, veamos cómo usarlas:

Crear un pattern usando Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Crea un patrón para encontrar "cat"

Crea un matcher para tu texto:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Creates a matcher for the text

Ahora puedes encontrar coincidencias usando matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

Después de ejecutar el código anterior, la salida es: Found at: 4

Entendiendo los métodos:

  • <b>matcher.find()</b> - Busca la siguiente ocurrencia del patrón en el texto
    • Devuelve true si se encuentra una coincidencia
    • Devuelve false si no hay más coincidencias
    • Por esto lo usamos en un bucle while - para encontrar todas las ocurrencias
  • <b>matcher.start()</b> - Devuelve el índice inicial (posición) de la última coincidencia encontrada por find()
    • En nuestro ejemplo, "cat" comienza en el índice 4 en "The cat and dog"
    • Debe ser llamado después de un find() exitoso

Ejemplo con múltiples coincidencias:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// Output:
// Found at: 0
// Found at: 8
challenge icon

Desafío

Fácil

Crea un método llamado findWords que tome dos argumentos:

  1. Un String (text) en el que buscar
  2. Un String (word) a encontrar

El método debe:

  1. Usar Pattern y Matcher para encontrar todas las ocurrencias de la palabra
  2. Devolver una cadena que contenga las posiciones donde se encontró la palabra
  3. Las posiciones deben estar separadas por espacios

Los mensajes de retorno deben ser:

  • Si algún input es null: return "Invalid input"
  • Si la palabra no se encuentra: return "Not found"
  • Si se encuentra: devolver posiciones (p. ej., "4 10 15")

Hoja de referencia

Las clases Pattern y Matcher proporcionan herramientas potentes para operaciones regex en Java.

Cree un pattern usando Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Crea un patrón para encontrar "cat"

Cree un matcher para su texto:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Crea un matcher para el texto

Encuentre coincidencias usando matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

Métodos clave:

  • <b>matcher.find()</b> - Busca la siguiente ocurrencia del patrón
    • Devuelve true si se encuentra, false si no hay más coincidencias
    • Úselo en un bucle para encontrar todas las ocurrencias
  • <b>matcher.start()</b> - Devuelve el índice inicial de la última coincidencia encontrada
    • Llame después de un find() exitoso

Pruébalo tú mismo

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

public class Main {
    public static String findWords(String text, String word) {
        // Escribe tu código aquí
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String word = scanner.nextLine();
        
        if (text.equals("null")) text = null;
        if (word.equals("null")) word = null;
        
        System.out.println(findWords(text, word));
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo