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 las operaciones con expresiones regulares en Java. Primero, comprendamos cómo utilizarlas:

Crea 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 reciba dos argumentos:

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

El método debe:

  1. Usar Pattern y Matcher para encontrar todas las apariciones 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 devueltos deben ser:

  • Si alguna entrada es null: devolver "Invalid input"
  • Si no se encuentra la palabra: devolver "Not found"
  • Si se encuentra: devolver las posiciones (por ejemplo, "4 10 15")

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

Practica por tu cuenta: Compilador de Java online