簡體   English   中英

Java字符串數組與枚舉的比較

[英]Java String array comparing with enum

給定以下代碼...

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”?

枚舉值不是字符串。 做這個 :

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

如果您想知道您的字符串是否為枚舉值的名稱,請執行

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

您可以刪除引號,但如果不能,則可以解析字符串。

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

一種脆弱但簡單的方法是比較字符串

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

后者對於單元測試可能是好的,但不適用於生產代碼。

您可以添加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"));

請記住,枚舉是常量,我不知道您將實現什么。 您可以閱讀有關枚舉類型的更多信息

正確用法是

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

這樣嘗試.....

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");
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM