Menu
CoddyTech

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, entendamos cómo usarlas:

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);
// Crea un matcher para el texto

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

Comprender los métodos:

  • matcher.find() - Busca la siguiente aparición del patrón en el texto
    • Devuelve true si se encuentra una coincidencia
    • Devuelve false si no existen más coincidencias
    • Por eso lo usamos en un bucle while: para encontrar todas las apariciones
  • matcher.start() - Devuelve el índice inicial (posición) de la última coincidencia encontrada por find()
    • En nuestro ejemplo, "cat" comienza en el índice 4 de "The cat and dog"
    • Debe llamarse 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());
}
// Salida:
// Encontrado en: 0
// Encontrado en: 8
challenge icon

Desafío

Fácil

Crea un método llamado findWords que acepte 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

Prueba un patrón con tu propio texto: Probador de Regex