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

发布于 2024-11-16 03:29:21 字数 514 浏览 5 评论 0原文

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

我想要完成的是:

如果在枚举中找不到该单词,则为数组的该特定元素调用外部方法 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”的内容时,我得到

没有枚举常量类

提前致谢!

I am writing an interpreter that parses an array of String and assigns each word in that file a numeric value.

What I want to accomplish, is this:

If the word is not found in the enum, call an external method parse() for that particular element of the array.

My code looks similar to this:

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

Unfortunately, when this finds something that does not equal "keyword0" or "keyword1" in the input, I get

No enum const class

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哆兒滾 2024-11-23 03:29:21

当没有对应的枚举值时,总会抛出IllegalArgumentException。只要抓住这个,你就很好了。

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

When there's no corresponding enum value, there will always be an IllegalArgumentException thrown. Just catch this, and you're good.

try {
    switch(Codes.valueOf(stringArray[0])) {
        case keyword0:
           value = 0;
           break;
        case keyword1:
           value = 1;
           break;
    }
}
catch(IllegalArgumentException e) {
    value = parse(stringArray[0]);
}
送君千里 2024-11-23 03:29:21

问题是,如果输入不是可能的枚举值,则 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 也是如此。

The problem is that valueOf throws an IllegalArgumentException if the input is not a possible enum value. One way you might approach this is...

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

}

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

If you're doing heavy duty parsing you may also want to look into a full fledged parser like ANTLR too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文