2012-10-01 75 views
8

我在美国所有的州的一个枚举列表如下:如何比较字符串与Java中的枚举类型?

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

,并在我的测试文件,我将包含状态的文本文件中读取输入。因为它们是字符串,我怎么能它以分配值,我已经建立了为变量比较枚举列表值:

private State state; 

我明白,我需要经过的枚举。但是,由于这些值不是字符串类型,因此如何比较它?这就是我盲目地输入的内容。我不知道这是否正确。

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

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

回答

22

试试这个

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

你可能想处理可能抛出的IllegalArgumentException - 如果“S”值不符合任何“国家”

+4

尽管它应该处理'IllegalArgumentException'。 –

4

使用.name()方法。像st.name()。例如State.AL.name()返回字符串“AL”。

所以,

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

应该工作。

2

来枚举比较字符串

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

     } 
    } 
+0

.toString()并不是真正做到这一点的正确方法,尽管它会起作用。 .name()方法是首选,因为您可以重写.toString()方法以在枚举类中执行任何您想要的操作,但是.name()方法在Enum类中声明为final(它是父类任何Java枚举)。 – Matt