Java 字符串转 Enum
在 Java 中,将字符串转换为枚举(Enum)类型是一个常见操作,以下是几种实现方法:

使用 Enum.valueOf() 方法
这是最直接的方法,但需要注意异常处理:
public enum Color {
RED, GREEN, BLUE;
}
public class Main {
public static void main(String[] args) {
try {
Color color = Color.valueOf("RED");
System.out.println(color); // 输出: RED
} catch (IllegalArgumentException e) {
System.out.println("无效的枚举值");
}
}
}
使用 Enum.valueOf() 并处理大小写
如果需要忽略大小写,可以先将字符串转换为大写或小写:
String colorStr = "red"; Color color = Color.valueOf(colorStr.toUpperCase()); // 输出: RED
使用循环查找
如果需要更灵活的转换(如忽略大小写或处理特殊字符):
public static Color fromString(String text) {
if (text == null) return null;
for (Color color : Color.values()) {
if (color.name().equalsIgnoreCase(text)) {
return color;
}
}
throw new IllegalArgumentException("No constant with text " + text + " in enum Color");
}
使用 Apache Commons Lang
如果你使用 Apache Commons Lang 库,可以使用 EnumUtils:

import org.apache.commons.lang3.EnumUtils; Color color = EnumUtils.getEnum(Color.class, "RED");
使用 Java 8 Stream API
public static Optional<Color> fromString(String text) {
if (text == null) return Optional.empty();
return Arrays.stream(Color.values())
.filter(color -> color.name().equalsIgnoreCase(text))
.findFirst();
}
注意事项
valueOf()方法是区分大小写的- 如果字符串与任何枚举常量都不匹配,会抛出
IllegalArgumentException - 考虑使用
Optional或自定义方法来处理无效输入,而不是直接抛出异常
完整示例
public enum Color {
RED, GREEN, BLUE;
public static Color fromString(String text) {
if (text == null) return null;
try {
return Color.valueOf(text.toUpperCase());
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("No enum constant " + Color.class.getCanonicalName() + "." + text);
}
}
public static Optional<Color> safeFromString(String text) {
if (text == null) return Optional.empty();
return Arrays.stream(values())
.filter(color -> color.name().equalsIgnoreCase(text))
.findFirst();
}
}
选择哪种方法取决于你的具体需求,包括是否需要大小写不敏感、是否需要处理无效输入等。

