Почему бы не перебрать возможности?
private boolean validGrade(final StringBuilder grade) {
String gradeString = grade.toString();
return List.of("2o", "4o", "6o", "8o")
.stream()
.map(x -> x + " semester")
.collect(Collectors.toSet())
.contains(gradeString);
}
В качестве альтернативы, если вы не ищете точных совпадений, выполните:
private boolean validGrade(final StringBuilder grade) {
String gradeString = grade.toString();
return gradeString.contains("semester") && List.of("2o", "4o", "6o", "8o")
.stream()
.anyMatch(gradeString::contains);
}
Наконец, если ваш набор совпадений негибкий (всегда будет "2o", "4o", "6o", "8o"
),тогда вы можете просто использовать регулярное выражение:
private boolean validGrade(final StringBuilder grade) {
return grade.toString().matches("[2468]o semester"); //exact match
// return grade.toString().matches("[2468]o.*semester|semester.*[2468]o"); //loose match
// return grade.toString().matches(".*([2468]o.*semester|semester.*[2468]o).*"); //equivalent to contains
}