Dopasowywanie wzorców
Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 37 z 59.
Dopasowywanie wzorców w Javie pozwala sprawdzić, czy obiekt ma określony typ, i wyodrębnić z niego składowe. Upraszcza sprawdzanie typów i rzutowanie.
Zobaczmy, jak używać dopasowywania do wzorca z instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str jest automatycznie rzutowany na String
System.out.println(str.toUpperCase());
}Po wykonaniu powyższego kodu wynikiem jest:
"HELLO"
Możesz też łączyć sprawdzanie dopasowania wzorców za pomocą else if:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Po wykonaniu powyższego kodu result zawiera:
“Number: 42”
Wyzwanie
ŁatwyUtwórz metodę o nazwie processValue, która przyjmuje jeden argument:
- Obiekt (
value), który może być różnych typów
Metoda powinna używać dopasowywania wzorców z instanceof, aby przetworzyć wartość i zwrócić ciąg znaków zgodnie z poniższymi regułami:
- Jeśli jest to Integer: zwróć "Number: " i podwojoną wartość
- Jeśli jest to String: zwróć "Text: " i wartość zapisaną wielkimi literami
- Jeśli jest to Boolean: zwróć "Boolean: " i przeciwną wartość (true zmienia się w false i odwrotnie)
- W przypadku każdego innego typu: zwróć "Unknown"
Spróbuj swoich sił
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Użyj dopasowywania wzorców z instanceof, aby przetworzyć wartość
// Jeśli jest typu Integer: zwróć "Number: " + (value * 2)
// Jeśli jest typu String: zwróć "Text: " + value.toUpperCase()
// Jeśli jest typu Boolean: zwróć "Boolean: " + (!value)
// Dla każdego innego typu: zwróć "Unknown"
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}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 — HashMap3HashMap — 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