如何将输入字符串与枚举进行比较?

时间:2014-02-20 18:46:30

标签: java enums

我的下面的枚举 -

public enum TestEnum {
    h1, h2, h3, h4;

    public static String forCode(int code) {
    return (code >= 0 && code < values().length) ? values()[code].name() : null;
    }

    public static void main(String[] args) {
        System.out.println(TestEnum.h1.name());
        String ss = "h1";

        // check here whether ss is in my enum or not

    }
}

现在我要检查的是一个字符串h1,我需要查看这个字符串h1是否在我的枚举中?我如何使用枚举?

3 个答案:

答案 0 :(得分:3)

您应避免对ordinals使用enum。而是给每个枚举常量赋值,并有一个字段。

因此,您的enum应如下所示:

public enum TestEnum {
    h1("h1"), h2("h2"), h3("h3"), h4("h4");

    private final String value;

    TestEnum(String value) { this.value = value; }

    public static TestEnum forValue(String value) {
        // You can cache the array returned by `values()` in the enum itself
        // Or build a map from `String` to `TestEnum` and use that here
        for (TestEnum val: values()) {
            if (val.value.equals(value)) {
                return val;
            }
        }
    }
}

然后对于给定的String,您可以检查它是否是有效值:

String value = "h1";

TestEnum enumValue = TestEnum.forValue(value);

if (enumValue == null) {
    System.out.println("Invalid value");
}

答案 1 :(得分:2)

最简单的方法:

try {
   TestEnum.valueOf(ss); 
   System.out.println("valid");
} catch (IllegalArgumentException e) {
   System.out.println("invalid");
}

答案 2 :(得分:1)

每个enum的设置值对我来说似乎没有必要。这是一个使用toString()而不是.value的解决方案,我觉得这有点简单:

public class tester {

public static void main(String[] args) {

    TestEnum enumValue = TestEnum.forValue("X1");
    if (enumValue == null) {
        System.out.println("Invalid value");
    } else {
        System.out.println("Good  value");
    }
}

public enum TestEnum {
    X1, X2, X#;

    public static TestEnum forValue(String value) {
        for (TestEnum val : values())
            if (val.toString().equals(value))
                return val;
        return null;
    }
}