Wie man einen Enum aus einem String in Java erhält: Ein vollständiger Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Enum und String ewige Begleiter sind?

\n\n

Stellen Sie sich vor: Sie schreiben ein Programm, das Befehle vom Benutzer entgegennimmt. Der Benutzer gibt "RED" ein, und Ihr Programm muss verstehen, dass dies die Farbe Color.RED ist. Oder Sie lesen Daten aus einer Datenbank, in der der Status als Text "ACTIVE" gespeichert ist, und im Code haben Sie einen Enum Status.ACTIVE. Wie verbindet man einen String und einen Enum? Dies ist eine der häufigsten Fragen auf Stack Overflow unter angehenden Java-Entwicklern – und heute werden wir sie ein für alle Mal klären.

\n\n

In diesem Artikel erfahren Sie:

\n
    \n
  • Wie man einen Enum aus einem String in Java mit valueOf() erhält
  • \n
  • Wie man die Situation behandelt, wenn der String nicht im Enum vorhanden ist (damit das Programm nicht abstürzt)
  • \n
  • Wie man eine eigene Methode für eine flexible Umwandlung schreibt
  • \n
  • Wie man mit Groß-/Kleinschreibung und Leerzeichen umgeht
  • \n
\n

Los geht's!

\n\n

1. Was ist ein Enum und warum sollte man ihn in einen String umwandeln?

\n\n

Enum (Abkürzung für enumeration – Aufzählung) ist ein spezieller Datentyp in Java, der einen festen Satz von Konstanten enthält. Zum Beispiel Wochentage, Farben, Bestellstatus.

\n\n
public enum Color {\n    RED, GREEN, BLUE, YELLOW\n}
\n\n

Die Arbeit mit Enums ist bequem: Der Code wird lesbar und der Compiler prüft, ob Sie keinen nicht existierenden Wert verwenden. Aber oft kommen Daten aus der Außenwelt – aus einer Datei, einer Datenbank oder einer Benutzereingabe – in Form von Strings. Und dann stellt sich die Aufgabe: Wie erhält man einen Enum aus einem String in Java?

\n\n

2. Die grundlegende Methode: valueOf()

\n\n

Der einfachste und integrierte Weg ist die Verwendung der statischen Methode valueOf(), die jeder Enum besitzt. Sie nimmt einen String entgegen und gibt die entsprechende Enum-Konstante zurück. Wichtig: Die Strings müssen exakt mit den Namen der Konstanten übereinstimmen, inklusive Groß-/Kleinschreibung.

\n\n
public class Main {\n    public static void main(String[] args) {\n        String input = "RED";\n        Color color = Color.valueOf(input);\n        System.out.println("Farbe: " + color); // Ausgabe: Farbe: RED\n    }\n}\n\nenum Color {\n    RED, GREEN, BLUE\n}
\n\n

Funktioniert es? Ja. Aber es gibt einen Haken. Wenn Sie den String "red" (kleingeschrieben) oder "PURPLE" (der nicht im Enum existiert) übergeben, wirft Java die Ausnahme IllegalArgumentException. Und das bedeutet – das Programm stürzt ab. Nicht gut.

\n\n

3. Wie man Fehler vermeidet: Ausnahmebehandlung

\n\n

Damit das Programm nicht abstürzt, muss man die Ausnahme abfangen. Dies ist besonders wichtig, wenn Sie einen Enum aus einem vom Benutzer eingegebenen String erhalten.

\n\n
public static Color getColorFromString(String input) {\n    try {\n        return Color.valueOf(input.toUpperCase());\n    } catch (IllegalArgumentException e) {\n        System.out.println("Fehler: Die Farbe '" + input + "' existiert nicht!");\n        return null; // oder ein Standardwert\n    }\n}\n\npublic static void main(String[] args) {\n    String userInput = "blue";\n    Color color = getColorFromString(userInput);\n    if (color != null) {\n        System.out.println("Sie haben gewählt: " + color);\n    }\n}
\n\n

Beachten Sie: Wir haben input.toUpperCase() verwendet – dies ermöglicht die Annahme von Strings in beliebiger Groß-/Kleinschreibung. In Java ist es üblich, Enum-Namen in Großbuchstaben zu schreiben, daher funktioniert dieser Trick fast immer.

\n\n

4. Fortgeschrittene Methode: Eigene Methode mit Map

\n\n

Manchmal stimmen die Namen der Konstanten im Enum nicht mit dem überein, was von außen kommt. Zum Beispiel haben Sie einen Enum mit russischen Namen oder mit Leerzeichen. In solchen Fällen müssen Sie ein eigenes Mapping erstellen.

\n\n
import java.util.HashMap;\nimport java.util.Map;\n\npublic enum Status {\n    ACTIVE("aktiv"),\n    INACTIVE("inaktiv"),\n    PENDING("ausstehend");\n\n    private final String displayName;\n\n    Status(String displayName) {\n        this.displayName = displayName;\n    }\n                

Blogs

Buchempfehlungen