在Java中将驼峰式字符串解析为大写枚举的任何优雅方法?

时间:2019-05-13 13:36:54

标签: java enums

我需要从字符串中解析枚举实例。问题是我有骆驼风格的输入字符串,例如docType和常量样式的枚举,例如DOC_TYPE

据我所知,java在枚举解析时需要完全匹配,因此我试图找到一种解决此问题的优雅方法。

2 个答案:

答案 0 :(得分:4)

Apache commons提供了一种方便的实用程序方法来分割驼峰式字符串:Apache commons

我已经使用它来完全满足您的要求:

final String[] words = StringUtils.splitByCharacterTypeCamelCase(camelCase);
final String name = String.join("_", words).toUpperCase();

答案 1 :(得分:2)

您可以在枚举中编写一个匹配并返回枚举项值的静态方法。

public enum SomeEnum {
    SOME_VALUE("someValue"),
    OTHER_VALUE("otherValue");

    private final String camelCaseValue;

    private static final SomeEnum[] values = values();

    SomeEnum(String camelCaseValue) {
        this.camelCaseValue = camelCaseValue;
    }

    public static SomeEnum fromCamelCase(String camelCaseValue) {
        for (SomeEnum value : values) {
            if(value.camelCaseValue.equals(camelCaseValue)) {
                return value;
            }
        }
        return SOME_VALUE;
    }
}

当然,您不必返回SOME_VALUE作为默认值。如果不匹配,则可以返回null或引发异常。如果可以动态编码映射(例如,删除下划线然后不区分大小写进行比较),则您甚至不需要存储camelCaseValue字段。

我只是想展示使用静态方法来获取枚举条目的基本思路。