Menu
Coddy logo textTech

Corrispondenza di pattern con le regex

Fa parte della sezione Logica e flusso del percorso Java di Coddy. Lezione 47 di 59.

Le classi Pattern e Matcher forniscono potenti strumenti per le operazioni con le espressioni regolari in Java. Per prima cosa, vediamo come usarle:

Crea un pattern usando Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Crea un pattern per trovare "cat"

Crea un matcher per il tuo testo:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Crea un matcher per il testo

Ora puoi trovare le corrispondenze usando matcher.find():

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

Dopo aver eseguito il codice qui sopra, l'output è: Found at: 4

Comprendere i metodi:

  • matcher.find() - Cerca la successiva occorrenza del modello nel testo
    • Restituisce true se viene trovata una corrispondenza
    • Restituisce false se non ci sono altre corrispondenze
    • Ecco perché lo usiamo in un ciclo while - per trovare tutte le occorrenze
  • matcher.start() - Restituisce l'indice iniziale (posizione) dell'ultima corrispondenza trovata da find()
    • Nel nostro esempio, "cat" inizia all'indice 4 in "The cat and dog"
    • Deve essere chiamato dopo una chiamata riuscita a find()

Esempio con corrispondenze multiple:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");
while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// Risultato:
// Found at: 0
// Found at: 8
challenge icon

Sfida

Facile

Crea un metodo chiamato findWords che accetta due argomenti:

  1. Una String (text) in cui cercare
  2. Una String (word) da trovare

Il metodo dovrebbe:

  1. Usare Pattern e Matcher per trovare tutte le occorrenze della parola
  2. Restituire una stringa contenente le posizioni in cui è stata trovata la parola
  3. Le posizioni devono essere separate da spazi

I messaggi restituiti dovrebbero essere:

  • Se un input è null: restituisci "Invalid input"
  • Se la parola non viene trovata: restituisci "Not found"
  • Se viene trovata: restituisci le posizioni (ad es., "4 10 15")

Provalo tu

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) {
        // Scrivi il tuo codice qui
    }
    
    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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Java online