与String枚举的Java String数组

时间:2012-10-11 10:18:03

标签: java enums

给出以下代码......

private enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE
}

public static void main(String[] args) {
    System.out.println("BREAK : " + EventTypes.BREAK);
    System.out.println(Arrays.asList(EventTypes.values()).contains("WORK"));
    System.out.println(Arrays.asList(EventTypes.values()).contains("WOR"));

}

这会产生输出......

BREAK : BREAK
false
false

现在,从输出中我可以看到“BREAK”作为字符串存在 - 那么为什么它相信“WORK”在上面的枚举中不存在?

4 个答案:

答案 0 :(得分:3)

枚举值不是字符串。这样做:

Arrays.asList(EventTypes.values()).contains(EventTypes.WORK));

如果您想知道您的字符串是否是枚举值的名称,请执行

boolean exist = false;
try {
    EventTypes.valueOf("WORK");
    exist = true; 
} catch (IllegalArgumentException e) {}

答案 1 :(得分:1)

您可以删除引号,但如果不能,则可以解析字符串。

Arrays.asList(EventTypes.values()).contains(EventTypes.valueOf("WORK"))

一种脆弱但简单的方法是比较字符串

Arrays.toString(EventTypes.values()).contains("WORK")

后者可能适用于单元测试但不适合生产代码。

答案 2 :(得分:1)

您可以添加contains

的自定义实施
private enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE;

    public static boolean contains(String str) {
        for (EventTypes enumtype : values()) {
            if (enumtype.name().contains(str))
                return true;
        }
        return false;
    }
}

然后您可以像下面一样使用它。

    System.out.println(EventTypes.contains("WORK"));
    System.out.println(EventTypes.contains("WOR"));

记住枚举是常量,我不知道你会做到这一点。 您可以在Enum Types

上阅读有关枚举的更多信息

正确使用

EventTypes enumType =EventTypes.valueOf("WORK");

答案 3 :(得分:0)

以这种方式试试......

enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE
};





public class T {

    public static void main(String[] args) {



        for(EventTypes e : EventTypes.values()){


            if(e.name().equals("WORK")){

                System.out.println("True");
            }else{

                System.out.println("False");
            }
        }
    }
}