2012-10-01 11 views
8

que tienen una lista de enumeración de todos los estados en los EE.UU. de la siguiente manera:¿Cómo se puede comparar la cadena con el tipo enum en Java?

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

y en mi archivo de prueba, voy a leer la entrada desde un archivo de texto que contiene el estado. Puesto que son cuerdas, ¿cómo puedo compararlo con el valor de la lista de enumeración con el fin de asignar un valor a la variable que he erigido como:

private State state; 

entiendo que tengo que ir a través de la lista de enumeración. Sin embargo, dado que los valores no son de tipo cadena, ¿cómo se puede comparar? Esto es lo que acabo de escribir a ciegas. No sé si es correcto o no.

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

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

Respuesta

22

probar esto

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

Es posible que desee manejar el IllegalArgumentException que puede ser lanzada si el valor de "s" no coincide con ningún "Estado"

+4

Debería manejar la 'IllegalArgumentException' aunque. –

4

Use .name() method. Me gusta st.name(). p.ej. State.AL.name() devuelve la cadena "AL".

Así,

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

debería funcionar.

2

a comparar enumeración de cadena

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

     } 
    } 
+0

.toString() no es realmente la manera correcta de hacerlo, aunque funcionará. Se prefiere el método .name() ya que puede anular el método .toString() para hacer cualquier cosa que desee en una clase enum, pero el método .name() se declara como final en la clase Enum (que es la clase padre de cualquier java enum). – Matt

Cuestiones relacionadas