我需要从字符串中解析枚举实例。问题是我有骆驼风格的输入字符串,例如docType
和常量样式的枚举,例如DOC_TYPE
。
据我所知,java在枚举解析时需要完全匹配,因此我试图找到一种解决此问题的优雅方法。
答案 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字段。
我只是想展示使用静态方法来获取枚举条目的基本思路。