如何在Java中将字符串与枚举类型进行比较?

10

我有一个包含所有美国州的枚举列表,如下所示:

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;
        }
    }
}
3个回答

26

试试这个

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

如果"s"的值与任何一个"State"不匹配,可能会抛出IllegalArgumentException异常,您可能希望处理它。


4
它应该处理 IllegalArgumentException 异常。 - Luiggi Mendoza

8
使用.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

        }
    }

1
“.toString()”不是真正正确的方法,尽管它可以工作。.name()方法更受欢迎,因为在枚举类中可以覆盖.toString()方法以执行其它操作,但是.Enum类(任何Java枚举的父类)中声明了.name()方法为final。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接