logo

Jak przekonwertować ciąg na Enum w Javie?

Wyliczenia Java to potężne typy danych, które reprezentują stały zestaw stałych. Są powszechnie używane do zarysowania określonego zestawu wartości, jakie może przyjąć obiekt. Czasami możesz chcieć przekonwertować ilustrację ciągu na wartość wyliczeniową. W tym kontekście zbadamy różne strategie konwersji ciągu znaków na wyliczenie w Javie, oferując cały program dla lepszego zrozumienia.

Zrozumienie Enum w Javie:

Zanim zagłębimy się w proces konwersji, podsumujmy krótko wyliczenie Java. Wyliczenia, w skrócie wyliczenia, zostały wprowadzone w Javie 5, aby zapewnić bardziej uporządkowany sposób reprezentowania wartości stałych. Deklaracja wyliczeniowa definiuje stały zestaw wartości, jakie może przyjmować zmienna tego typu wyliczeniowego. Każda wartość w wyliczeniu nazywana jest stałą wyliczeniową.

Oto przykład deklaracji wyliczenia:

 public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } 

W tym przypadku Dzień jest nazwą wyliczenia i ma siedem stałych reprezentujących dni tygodnia. Enum może również zawierać dodatkowe pola i metody, dzięki czemu są bardziej elastyczne i wydajne niż proste wartości stałe.

Konwersja ciągu na wyliczenie:

Jeśli masz reprezentację w postaci ciągu znaków i chcesz ją przekonwertować na wyliczenie, możesz zastosować inną taktykę w zależności od wymagań. Tutaj omówimy 3 typowe metody przeprowadzania tej konwersji: użycie metody valueOf(), użycie niestandardowego mapowania i użycie metody Enum.ValueOf().

Metoda 1: Użycie metody valueOf().

Maksymalnie bezpośredni sposób konwersji ciągu znaków na wyliczenie polega na użyciu techniki valueOf() dostarczonej za pomocą samego wyliczenia. W tym podejściu nazwa wyliczenia jest spójna jako ciąg znaków i w przypadku wykrycia zwraca odpowiednie wyliczenie. Oto przykład:

StringToEnumExample.java

 public class StringToEnumExample { public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { String dayString = 'FRIDAY'; Day day = Day.valueOf(dayString); System.out.println(day); // Output: FRIDAY } } 

Wyjście:

 FRIDAY 

W tym przykładzie konwertujemy ciąg „PIĄTEK” na wyliczenie Dzień, wywołując metodę valueOf(). Wynikiem jest stała wyliczeniowa Dzień.piątek, która jest następnie drukowana na konsoli.

Należy pamiętać, że w metodzie valueOf() rozróżniana jest wielkość liter i jeśli ciąg znaków nie pasuje do żadnej stałej wyliczeniowej, zostanie zgłoszony wyjątek java.lang.IllegalArgumentException. Aby sobie z tym poradzić, możesz zawinąć konwersję w blok try-catch, aby sprawnie obsłużyć wyjątek.

Metoda 2: Korzystanie z niestandardowego mapowania

W niektórych przypadkach może być konieczne wykonanie niestandardowego mapowania pomiędzy reprezentacją ciągu a stałą wyliczeniową. To podejście jest przydatne, gdy wartości łańcuchowe nie odpowiadają dokładnie nazwom stałych wyliczeniowych. Oto przykład:

StringToEnumExample.java

 public class StringToEnumExample { // Define the Day enum with associated abbreviations public enum Day { MONDAY('Mon'), TUESDAY('Tue'), WEDNESDAY('Wed'), THURSDAY('Thu'), FRIDAY('Fri'), SATURDAY('Sat'), SUNDAY('Sun'); // Private field to store the abbreviation for each day private final String abbreviation; // Constructor to initialize the abbreviation for each enum constant Day(String abbreviation) { this.abbreviation = abbreviation; } // Getter method to retrieve the abbreviation for a specific day public String getAbbreviation() { return abbreviation; } // Custom method to convert an abbreviation string to the corresponding enum constant public static Day fromAbbreviation(String abbreviation) { for (Day day : Day.values()) { if (day.getAbbreviation().equalsIgnoreCase(abbreviation)) { return day; } } // If no match is found, throw an IllegalArgumentException throw new IllegalArgumentException('Invalid abbreviation: ' + abbreviation); } } public static void main(String[] args) { String dayString = 'Fri'; // Convert the abbreviation string to the corresponding Day enum constant Day day = Day.fromAbbreviation(dayString); System.out.println(day); // Output: FRIDAY } } 

Wyjście:

 FRIDAY 

W tym przykładzie wyliczenie Dzień zawiera dodatkowe pole zwane skrótem, które reprezentuje krótszy ciąg reprezentujący dzień. Definiujemy niestandardową metodę fromAbbreviation(), która dokonuje konwersji na podstawie skrótu. Jeśli skrót pasuje do dowolnej stałej wyliczeniowej, zwracana jest odpowiadająca stała wyliczeniowa; w przeciwnym razie zgłaszany jest wyjątek.

Metoda 3: Korzystanie z metody Enum.valueOf().

Trzecia metoda polega na użyciu metody Enum.valueOf(), która jest metodą ogólnego przeznaczenia służącą do konwertowania ciągów znaków na stałe wyliczeniowe. Oto przykład:

StringToEnumExample.java

 public class StringToEnumExample { // Define the Day enum with seven constants representing the days of the week public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { // Define the string representation of the day String dayString = 'SUNDAY'; // Convert the string to the corresponding Day enum constant using Enum.valueOf() Day day = Enum.valueOf(Day.class, dayString); // Print the value of the day System.out.println(day); // Output: SUNDAY } } 

Wyjście:

 SUNDAY 

W tym przykładzie przekazujemy klasę wyliczeniową (Day.class) i reprezentację w postaci ciągu znaków (dayString) do metody Enum.valueOf(). Zwraca odpowiednią stałą wyliczeniową, jeśli zostanie znaleziona, lub zgłasza wyjątek IllegalArgumentException, jeśli nie zostanie znalezione dopasowanie.

W tym artykule omówiliśmy różne metody konwersji ciągu znaków na wyliczenie w Javie. Omówiliśmy użycie metody valueOf(), tworzenie niestandardowego mapowania i wykorzystanie metody Enum.valueOf(). W zależności od wymagań możesz wybrać najbardziej odpowiednie podejście. Pamiętaj, aby obsługiwać wyjątki podczas korzystania z metody valueOf() i rozważ niestandardowe mapowanie, gdy wartości łańcuchów nie pasują bezpośrednio do nazw stałych wyliczeniowych.