Menu
Coddy logo textTech

Dopasowywanie wzorców za pomocą Regex

Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 47 z 59.

Klasy Pattern i Matcher zapewniają zaawansowane narzędzia do operacji na wyrażeniach regularnych w Javie. Najpierw dowiedzmy się, jak ich używać:

Utwórz pattern za pomocą Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Tworzy wzorzec do wyszukiwania "cat"

Utwórz matcher dla swojego tekstu:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Tworzy obiekt matcher dla tekstu

Teraz możesz znajdować dopasowania za pomocą matcher.find():

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

Po wykonaniu powyższego kodu wynik to: Found at: 4

Omówienie metod:

  • matcher.find() - Wyszukuje następne wystąpienie wzorca w tekście
    • Zwraca true, jeśli znaleziono dopasowanie
    • Zwraca false, jeśli nie ma już więcej dopasowań
    • Dlatego używamy jej w pętli while — aby znaleźć wszystkie wystąpienia
  • matcher.start() - Zwraca indeks początkowy (pozycję) ostatniego dopasowania znalezionego przez find()
    • W naszym przykładzie „cat” zaczyna się pod indeksem 4 w „The cat and dog”
    • Należy ją wywołać po udanym find()

Przykład z wieloma dopasowaniami:

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

Wyzwanie

Łatwy

Utwórz metodę o nazwie findWords, która przyjmuje dwa argumenty:

  1. String (text), w którym należy wyszukać
  2. String (word), który należy znaleźć

Metoda powinna:

  1. Użyć Pattern i Matcher, aby znaleźć wszystkie wystąpienia słowa
  2. Zwrócić ciąg zawierający pozycje, w których znaleziono słowo
  3. Oddzielić pozycje spacjami

Komunikaty zwracane przez metodę powinny być następujące:

  • Jeśli którekolwiek wejście ma wartość null: zwrócić "Invalid input"
  • Jeśli nie znaleziono słowa: zwrócić "Not found"
  • Jeśli znaleziono: zwrócić pozycje (np. "4 10 15")

Spróbuj swoich sił

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) {
        // Napisz tutaj swój kod
    }
    
    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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Java online