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 tekstuTeraz 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
- Zwraca
matcher.start()- Zwraca indeks początkowy (pozycję) ostatniego dopasowania znalezionego przezfind()- 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: 8Wyzwanie
ŁatwyUtwórz metodę o nazwie findWords, która przyjmuje dwa argumenty:
- String (
text), w którym należy wyszukać - String (
word), który należy znaleźć
Metoda powinna:
- Użyć Pattern i Matcher, aby znaleźć wszystkie wystąpienia słowa
- Zwrócić ciąg zawierający pozycje, w których znaleziono słowo
- 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));
}
}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
1Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DDodawanie i odejmowanie macierzyTablice postrzępioneTablice 3D i większeTypowe wzorce dla tablic 2DPodsumowanie — wszystko o tablicach2HashMap część 1
Czym jest HashMap?Deklarowanie HashMapDostęp do wartościSprawdzanie, czy klucz istniejeModyfikowanie słownikówPodsumowanie — HashMap5HashSet — część 2
Matematyka — suma zbiorów HashSetMatematyka — część wspólna zbiorów HashSetMatematyka — różnica zbiorówMatematyka — różnica symetrycznaPodzbiory i nadzbioryIterowanie po zbiorach8Zaawansowane operacje na ciągach znaków
Podstawy StringBuilderWprowadzenie do StringBufferPodstawy wyrażeń regularnychDopasowywanie wzorców za pomocą RegexTokenizer ciągów znakówZaawansowane formatowanie ciągów znaków3HashMap — część 2
Metody HashMapIterowanie za pomocą keySet()Iterowanie za pomocą entrySet()Zagnieżdżona HashMapPowtórka — zarządzanie magazynemPowtórka — operacje na HashMap6Zaawansowany przepływ sterowania
Instrukcje etykietująceWyrażenie switchDopasowywanie wzorcówKlauzule ochronnePowtórzenie — przepływ sterowania9Projekt — licznik unikalnych słów
Wprowadzanie i przechowywanie tekstuPrzetwarzanie słówPoćwicz samodzielnie: Kompilator Java online