2012-10-01 35 views
8

Ho un elenco enum di tutti gli stati degli Stati Uniti come segue:Come confrontare la stringa con il tipo enum in Java?

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

e nel mio file di prova, leggerò input da un file di testo che contengono lo stato. Dal momento che sono stringa, come posso paragonarlo al valore della lista enum per assegnare valore alla variabile che ho impostato come:

private State state; 

ho capito che ho bisogno di passare attraverso la lista enum. Tuttavia, poiché i valori non sono di tipo stringa, come puoi confrontarlo? Questo è ciò che scrivo alla cieca. Non so se è corretto o no.

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

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

risposta

22

provare questo

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

Si potrebbe voler gestire l'IllegalArgumentException che può essere gettato se il valore "s" non corrisponde a nessuno "Stato"

+4

Dovrebbe comunque gestire 'IllegalArgumentException'. –

4

Utilizzare il metodo .name(). Mi piace st.name(). per esempio. State.AL.name() restituisce la stringa "AL".

Quindi,

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

dovrebbe funzionare.

2

per confrontare enum a stringa

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

     } 
    } 
+0

.toString() non è davvero il modo giusto per farlo, anche se funzionerà. Il metodo .name() è preferito in quanto è possibile sovrascrivere il metodo .toString() per fare tutto ciò che si desidera in una classe enum, ma il metodo .name() è dichiarato come finale nella classe Enum (che è la classe genitore di qualsiasi java enum). – Matt