У меня есть функция, которая находит одну группу, которая прекрасно работает
public static Optional<String> locateInText(String text, Pattern pattern) {
Matcher matcher = pattern.matcher(text);
return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
}
Теперь я пытаюсь создать функцию, которая находит 2 группы и объединяет их и возвращает значение в строке, если две группы не существует return 1 group
public static Optional<String> locateInTextt(String text, Pattern pattern) {
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
if (matcher.groupCount() > 1) {
int sum = Integer.parseInt(matcher.group(1)) + Integer.parseInt(matcher.group(2));
return Optional.of(String.valueOf(sum));
} else if (matcher.groupCount() == 1) {
return Optional.of(matcher.group(1));
}
}
return Optional.empty();
}
Тест сработал, если есть два совпадения, но если есть только одно, оно продолжает возвращаться пустым, то, что мне не хватает, я прочитал некоторую информацию, и это представляется возможным чтобы указать группу как необязательную, буду признателен за любой совет
Текст варианта использования:
Всего 2 Коробки, 193 Короб-шкафа
в этом случае, Мне нужно захватить обе группы, а это 2 и 193 = 195
Текст варианта второго использования
Всего 2 Коробки
Текст варианта третьего использования
Всего 193 Короб-шкафа
Pattern.compile("Всего\\s*(\\d*)\\s*Коробки,\\s*([\\d,]*)\\s*(?:Короб-шкаф[ова]*|Коробо*к[аи]*)");