logo

Hur konverterar man en sträng till Enum i Java?

Java enum är kraftfulla datatyper som representerar en fast uppsättning konstanter. De används vanligtvis för att beskriva en specifik uppsättning värden som ett objekt kan ta. Ibland kanske du vill konvertera en strängillustration till ett uppräkningsvärde. I detta sammanhang kommer vi att utforska olika strategier för att konvertera en sträng till en enum i Java, vilket ger dig ett helt program för en bättre förståelse.

Förstå Enum i Java:

Innan vi går in i konverteringsprocessen, låt oss kort sammanfatta Java-enum. Uppräkningar, eller enum för kort, introducerades i Java 5 för att ge ett mer strukturerat sätt att representera konstanta värden. En enum-deklaration definierar en fast uppsättning värden som en variabel av den enumtypen kan ta. Varje värde i en enum kallas en enum-konstant.

Här är ett exempel på en enum-deklaration:

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

I det här fallet är Day namnet på enumet, och det har sju konstanter som representerar veckodagarna. Enum kan också ha ytterligare fält och metoder, vilket gör dem mer flexibla och kraftfulla än enkla konstanta värden.

Konvertera en sträng till Enum:

När du har en strängrepresentation och även vill konvertera den till en enum, kan du följa olika taktiker baserat på dina krav. Här kommer vi att tala om tre vanliga metoder för att utföra denna omvandling: användningen av metoden valueOf(), användningen av en anpassad mappning och användningen av metoden Enum.ValueOf().

Metod 1: Använd metoden valueOf().

Det maximala direkta sättet att konvertera en sträng till en enum är med hjälp av användningen av valueOf()-tekniken som tillhandahålls med hjälp av själva enumen. Detta tillvägagångssätt tar namnet på enummet konsekvent som en sträng och returnerar motsvarande enum regular om det upptäcks. Här är ett exempel:

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 } } 

Produktion:

 FRIDAY 

I det här exemplet konverterar vi strängen 'FRIDAY' till Day enum genom att anropa metoden valueOf(). Resultatet är konstanten Day.FRIDAY enum, som sedan skrivs ut på konsolen.

Det är viktigt att notera att metoden valueOf() är skiftlägeskänslig, och om strängen inte matchar någon enum-konstant kommer en java.lang.IllegalArgumentException att kastas. För att hantera detta kan du slå in konverteringen i ett försök-fångst-block för att hantera undantaget på ett elegant sätt.

Metod 2: Använda en anpassad mappning

I vissa fall kan du behöva utföra en anpassad mappning mellan strängrepresentationen och enumkonstanten. Detta tillvägagångssätt är användbart när strängvärdena inte exakt matchar enumkonstantens namn. Här är ett exempel:

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 } } 

Produktion:

 FRIDAY 

I det här exemplet har Day enum ett extra fält som kallas förkortning, som representerar en kortare strängrepresentation av dagen. Vi definierar en anpassad metod frånAbbreviation() som utför konverteringen baserat på förkortningen. Om förkortningen matchar någon enum-konstant, returneras motsvarande enum-konstant; annars görs ett undantag.

Metod 3: Använder metoden Enum.valueOf().

Den tredje metoden innebär att man använder metoden Enum.valueOf(), som är en allmän metod för att konvertera strängar till enumkonstanter. Här är ett exempel:

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 } } 

Produktion:

 SUNDAY 

I det här exemplet skickar vi enum-klassen (Day.class) och strängrepresentationen (dayString) till metoden Enum.valueOf(). Den returnerar motsvarande enum-konstant om den hittas, eller kastar ett IllegalArgumentException om ingen matchning hittas.

I den här artikeln utforskade vi olika metoder för att konvertera en sträng till en enum i Java. Vi diskuterade att använda metoden valueOf(), att skapa en anpassad mappning och använda metoden Enum.valueOf(). Beroende på dina krav kan du välja den mest lämpliga metoden. Kom ihåg att hantera undantag när du använder metoden valueOf() och överväg en anpassad mappning när strängvärdena inte matchar enumkonstantens namn direkt.