2345 Stimmen

Wie erhält man einen Enum-Wert aus einem String-Wert in Java?

Sagen wir, ich habe eine Aufzählung, die nur aus

public enum Blah {
    A, B, C, D
}

und ich möchte den Enum-Wert einer Zeichenkette finden, zum Beispiel "A" das hieße Blah.A . Wie wäre es möglich, dies zu tun?

Ist die Enum.valueOf() die Methode, die ich brauche? Wenn ja, wie würde ich sie anwenden?

9voto

pjklauser Punkte 1106

Apache's commons-lang Bibliothek hat eine statische Funktion org.apache.commons.lang3.EnumUtils.getEnum die einen String auf Ihren Enum-Typ abbildet. Im Wesentlichen die gleiche Antwort wie Geoffrey Zheng's aber es gibt keinen Grund, etwas Eigenes zu entwickeln, wenn es bereits in freier Wildbahn verfügbar ist.

9voto

tom Punkte 2646

Um die vorangegangenen Antworten zu ergänzen und auf einige der Diskussionen über Nullen und NPE Ich benutze Guave Sonderangebote um abwesende/ungültige Fälle zu bearbeiten. Dies funktioniert hervorragend für URI und Parameter-Parsing.

public enum E {
    A,B,C;
    public static Optional<E> fromString(String s) {
        try {
            return Optional.of(E.valueOf(s.toUpperCase()));
        } catch (IllegalArgumentException|NullPointerException e) {
            return Optional.absent();
        }
    }
}

Für diejenigen, die es noch nicht wissen, hier einige weitere Informationen zur Vermeidung von Null mit Optional .

8voto

Sisyphus Punkte 796

Eine O(1)-Methode inspiriert von Sparsamkeit -generierten Code, der ein Hashmap verwendet.

public enum USER {
        STUDENT("jon",0),TEACHER("tom",1);

        private static final Map<String, Integer> map = new HashMap<>();

        static {
                for (USER user : EnumSet.allOf(USER.class)) {
                        map.put(user.getTypeName(), user.getIndex());
                }
        }

        public static int findIndexByTypeName(String typeName) {
                return map.get(typeName);
        }

        private USER(String typeName,int index){
                this.typeName = typeName;
                this.index = index;
        }
        private String typeName;
        private int index;
        public String getTypeName() {
                return typeName;
        }
        public void setTypeName(String typeName) {
                this.typeName = typeName;
        }
        public int getIndex() {
                return index;
        }
        public void setIndex(int index) {
                this.index = index;
        }

}

6voto

Prasobh.Kollattu Punkte 1511
public static MyEnum getFromValue(String value) {
    MyEnum resp = null;
    MyEnum nodes[] = values();
    for(int i = 0; i < nodes.length; i++) {
        if(nodes[i].value.equals(value)) {
            resp = nodes[i];
            break;
        }
    }
    return resp;
}

6voto

KNU Punkte 2444

java.lang.Enum definiert mehrere nützliche Methoden, die für alle Aufzählungstypen in Java verfügbar sind:

  • Sie können die name() Methode, um den Namen einer Enum-Konstanten zu erhalten. Das String-Literal, das zum Schreiben von Enum-Konstanten verwendet wird, ist ihr Name.
  • Ähnlich verhält es sich mit der values() Methode kann verwendet werden, um ein Array aller Enum-Konstanten von einem Enum-Typ zu erhalten.
  • Und für die gestellte Frage können Sie die valueOf() Methode, um eine beliebige Zeichenkette in eine Enum-Konstante in Java zu konvertieren, wie unten gezeigt.

    public class EnumDemo06 { public static void main(String args[]) { Gender fromString = Gender.valueOf("MALE"); System.out.println("Gender.MALE.name() : " + fromString.name()); }

    private enum Gender {
        MALE, FEMALE;
    }

    }

    Output: Gender.MALE.name() : MALE

In diesem Codeschnipsel wird die valueOf() Methode gibt eine Enum-Konstante zurück, Geschlecht.MALE und das Aufrufen des Namens ergibt "MALE" .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X