To retrieve an enum value from a string in Java, follow these steps:
1. Use valueOf
for Exact Name Matching
If the string exactly matches the enum constant’s name (case-sensitive), use the built-in valueOf
method:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
// Example usage:
String input = "MONDAY";
Day day = Day.valueOf(input); // Returns Day.MONDAY
Note:
- Throws
IllegalArgumentException
if the string doesn’t match any enum constant. - Case-sensitive (e.g., “monday” will fail).
2. Custom Lookup for Non-Name Fields
If the string maps to a custom field (e.g., a code or label), implement a static lookup method:
public enum Status {
OPEN("open"),
CLOSED("closed");
private final String code;
Status(String code) {
this.code = code;
}
public static Status fromCode(String code) {
for (Status status : Status.values()) {
if (status.code.equalsIgnoreCase(code)) {
return status;
}
}
throw new IllegalArgumentException("Invalid code: " + code);
}
}
// Example usage:
String input = "OPEN";
Status status = Status.fromCode(input); // Returns Status.OPEN
3. Case-Insensitive Lookup for Enum Names
To handle case-insensitive name matching, loop through the enum values:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
public static Day fromNameIgnoreCase(String name) {
for (Day day : Day.values()) {
if (day.name().equalsIgnoreCase(name)) {
return day;
}
}
throw new IllegalArgumentException("Invalid name: " + name);
}
}
// Example usage:
String input = "monday";
Day day = Day.fromNameIgnoreCase(input); // Returns Day.MONDAY
4. Return Optional
for Safe Handling
Return Optional
to avoid exceptions and handle missing values gracefully:
public enum Day {
// ... enum constants ...
public static Optional<Day> fromName(String name) {
return Arrays.stream(Day.values())
.filter(day -> day.name().equalsIgnoreCase(name))
.findFirst();
}
}
// Example usage:
Optional<Day> day = Day.fromName("monday");
day.ifPresentOrElse(
d -> System.out.println("Found: " + d),
() -> System.out.println("Not found")
);
5. Handle Invalid Input
Always validate input to prevent exceptions:
public static Day safeValueOf(String input) {
try {
return Day.valueOf(input.toUpperCase());
} catch (IllegalArgumentException e) {
return Day.MONDAY; // Default value
}
}
Key Takeaways
Scenario | Solution |
---|---|
Exact name match (case-sensitive) | Enum.valueOf() |
Custom field lookup | Static method with loop/stream |
Case-insensitive name match | Loop and compare with equalsIgnoreCase |
Safe handling | Return Optional or default value |
By choosing the appropriate method, you can reliably convert strings to enum values in Java.