首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中从字符串值获取枚举值

如何在Java中从字符串值获取枚举值
EN

Stack Overflow用户
提问于 2009-03-03 06:56:35
回答 24查看 1.4M关注 0票数 2.2K

假设我有一个枚举,它只是

代码语言:javascript
复制
public enum Blah {
    A, B, C, D
}

我想要查找字符串的枚举值,例如将为Blah.A"A"。怎么可能做到这一点呢?

Enum.valueOf()是我需要的方法吗?如果是这样,我该如何使用它呢?

EN

回答 24

Stack Overflow用户

发布于 2010-06-03 18:57:50

如果文本与枚举值不同,另一种解决方案:

代码语言:javascript
复制
public enum Blah {
    A("text1"),
    B("text2"),
    C("text3"),
    D("text4");

    private String text;

    Blah(String text) {
        this.text = text;
    }

    public String getText() {
        return this.text;
    }

    public static Blah fromString(String text) {
        for (Blah b : Blah.values()) {
            if (b.text.equalsIgnoreCase(text)) {
                return b;
            }
        }
        return null;
    }
}
票数 964
EN

Stack Overflow用户

发布于 2009-11-12 23:52:49

下面是我使用的一个很棒的实用程序:

代码语言:javascript
复制
/**
 * A common method for all enums since they can't have another base class
 * @param <T> Enum type
 * @param c enum type. All enums must be all caps.
 * @param string case insensitive
 * @return corresponding enum, or null
 */
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
    if( c != null && string != null ) {
        try {
            return Enum.valueOf(c, string.trim().toUpperCase());
        } catch(IllegalArgumentException ex) {
        }
    }
    return null;
}

然后在我的enum类中,我通常会这样做,以节省一些输入:

代码语言:javascript
复制
public static MyEnum fromString(String name) {
    return getEnumFromString(MyEnum.class, name);
}

如果您的枚举不都是大写的,只需更改Enum.valueOf行。

太糟糕了,我不能为Enum.valueOf使用T.class,因为T被擦除了。

票数 129
EN

Stack Overflow用户

发布于 2009-05-09 16:33:36

你也应该小心处理你的案例。让我解释一下:做Blah.valueOf("A")可以工作,但是Blah.valueOf("a")不能工作。然后,Blah.valueOf("a".toUpperCase(Locale.ENGLISH))又可以工作了。

在安卓系统中,你应该以sulai points out的身份使用Locale.US

票数 77
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/604424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档