2012-10-01 12 views
8

Mam listy enum wszystkich stanach USA, jak następuje:Jak porównać ciąg znaków do typu wyliczeniowego w Javie?

public enum State 
{ AL, AK, AZ, AR, ..., WY } 

iw moim pliku testowego, będę czytać dane z pliku tekstowego, który zawiera stan. Ponieważ są one ciąg, jak mogę porównać go do wartości listy enum w celu przypisania wartości do zmiennej, że mam ustawiony jako:

private State state; 

Rozumiem, że trzeba przejść przez liście enum. Ponieważ jednak wartości nie są typami ciągów, jak można je porównać? Właśnie to piszę na ślepo. Nie wiem, czy to prawda, czy nie.

public void setState(String s) 
{ 
    for (State st : State.values()) 
    { 
     if (s == State.values().toString()) 
     { 
      s = State.valueOf(); 
      break; 
     } 
    } 
} 
+0

'==' -> '.equals (..)' – arshajii

Odpowiedz

22

spróbować

public void setState(String s){ 
state = State.valueOf(s); 
} 

Może chcesz obsługiwać IllegalArgumentException które mogą być wyrzucone jeśli „s” wartość nie pasuje do żadnego „Państwo”

+4

Powinien jednak obsłużyć 'IllegalArgumentException'. –

4

Użyj metody .name(). Podobnie jak st.name(). na przykład State.AL.name() zwraca ciąg "AL".

Więc

if(st.name().equalsIgnoreCase(s)) { 

powinno działać.

2

porównania enum ciąg

for (Object s : State.values()) 
    { 
      if (theString.equals(s.toString())) 
     { 
      // theString is equal State object 

     } 
    } 
+0

.toString() nie jest właściwą drogą, ale zadziała. Preferowana jest metoda .name(), ponieważ można zastąpić metodę .toString(), aby wykonać dowolną czynność w klasie wyliczeniowej, ale metoda .name() jest zadeklarowana jako ostateczna w klasie Enum (która jest klasą nadrzędną dowolne wyliczenie w języku Java). – Matt