处理与Java枚举不匹配的字符串

时间:2011-06-17 19:20:03

标签: java string enumeration string-matching

我正在编写一个解释器,它解析一个String数组,并为该文件中的每个单词分配一个数值。

我想要完成的是:

如果在枚举中找不到该词,请为该数组的特定元素调用外部方法parse()

我的代码与此类似:

private enum Codes {keyword0, keyword1};

switch Codes.valueOf(stringArray[0])
{

case keyword0:
{
    value = 0;
    break;
}
case keyword1:
{
    value = 1;
    break;
}
default:
{
    value = parse(StringArray[0]);
    break;
}
}

不幸的是,当它在输入中发现不等于“keyword0”或“keyword1”的内容时,我得到了

  

没有枚举const类

提前致谢!

2 个答案:

答案 0 :(得分:11)

如果没有相应的枚举值,则始终会抛出IllegalArgumentException。抓住这个,你很好。

try {
    switch(Codes.valueOf(stringArray[0])) {
        case keyword0:
           value = 0;
           break;
        case keyword1:
           value = 1;
           break;
    }
}
catch(IllegalArgumentException e) {
    value = parse(stringArray[0]);
}

答案 1 :(得分:3)

问题是如果输入不是可能的枚举值,valueOf会抛出IllegalArgumentException。你可能采取的一种方法是......

Codes codes = null;
try {
    Codes codes = Codes.valueOf(stringArray[0]);
} catch (IllegalArgumentException ex) {

}

if(codes == null) {
    value = parse(StringArray[0]);
} else {
    switch(codes) {
        ...
    }
}

如果你正在进行重度解析,你也可能想要查看一个完整的解析器,如ANTLR