2013-03-15 44 views
11

我有一個字符串值,我也有一個字符串數組和一個枚舉包含範圍也。 爲了獲取字符串的索引數組中,從價值提供的我寫這篇文章:從字符串獲取枚舉的索引?

Arrays.asList(myClass.BAUD_RATES).indexOf(username) 

如何做到這一點的一個枚舉?我可以使用序數嗎?或者我必須做出自己的方法?

的方法可能會去像:

public enum Fruit { 
    ... 
    static public boolean isMember(String aName) { 
     Fruit[] aFruits = Fruit.values(); 
     for (Fruit aFruit : aFruits) 
      if (aFruit.fruitname.equals(aName)) 
       return aFruit; 
     return false; 
    } 
    ... 
} 

回答

56

不知道如果我理解正確,但也許你正在尋找

YourEnum.valueOf("VALUE").ordinal(); 
  • YourEnum.valueOf("VALUE")回報與名稱枚舉值VALUE
  • 和每個枚舉值知道它的位置(從零開始索引),我們可以使用ordinal()方法看到它的位置。
+0

感謝所有回答傢伙,這些都工作,顯然這不是我的問題。問題是,如果我搜索庫,比如在字符串數組中的9600,它工作正常。但是當我在枚舉中搜索相同的值時,它說它不是枚舉中的值。 03-15 16:04:19.925:E/AndroidRuntime(19719):引起:java.lang.IllegalArgumentException:19200不是slickdevlabs.apps.usb2seriallib.SlickUSB2Serial $ BaudRate中的常量,所以我將只使用字符串數組。 ..不知道爲什麼這是這種情況。幸運的是,圖書館也給了一個字符串數組。 – Paul 2013-03-15 16:11:20

10

我可能不明白你的問題,但同樣的代碼適用於枚舉太:

int index = Arrays.asList(YourEnum.values()).indexOf(YourEnum.ENUM_ITEM); 

或者你可以得到:

int index = YourEnum.valueOf("ENUM_ITEM").ordinal(); 
2

如果要檢索索引,你可以使用序數。如果你想給String賦一些特定的值,你可以定義你自己的方法來檢索它。

enum DAY 
{ 
    MONDAY(10), 
    TUESDAY(20); 
    int value; 
    DAY(int x) 
    { 
    this.value = x; 
    } 
    public int getValue() 
    { 
    return value; 
    } 

現在值和序可以檢索爲:

for(DAY s : DAY.values()) 
    { 
     System.out.println(s.ordinal()); 
     System.out.println(s.getValue()); 
    } 
0

下面的邏輯也將起作用。

如果你要檢查你知道fruitname已經不使用for循環去與Pshemo

for (Fruit aFruit : aFruits) 
      if (aFruit.name().equals(aName)) 
       return aFruit.ordinal(); 
1

提到的方法試試這個簡單的解決方案:

Fruit.values()[index]