2013-03-15 85 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]