Я думаю, что будет сложно охватить все возможности введенного текста, но вот решение, которое нужно начать с использования reg ex match
Регулярное выражение будет пытаться сопоставить первые цифры (количество) с последующими 0 или больше пробелов и затем несколько букв (вес и c), а затем предполагается, что ингредиентом является оставшаяся часть строки.
String regex = "^(\\d+)\\s*(\\w*)\\s*(.*)$";
Pattern pattern = Pattern.compile(regex);
for (String string : list) {
Matcher matcher = pattern.matcher(string);
if (matcher.matches()) {
Integer quantity = Integer.valueOf(matcher.group(1).trim());
String measurement = matcher.group(2).trim();
String ingredient = matcher.group(3).trim();
System.out.printf("Quantity: %d, measurement: %s, ingredient: %s\n", quantity, measurement, ingredient);
}
}
Используя список «1 кг курицы», «1 кг оливкового» масло "," 250 г курицы "," 250 г курицы "это выводит
Количество: 1, измерение: кг, ингредиент: курица
Количество: 1, измерение: кг, ингредиент: оливковое масло
Количество: 250, измерение: г, ингредиент: курица
Количество: 250, измерение: г, ингредиент: курица
Обновление
Если вы хотите обрабатывать такие измерения, как 1/2 или 0,5, тогда значение reg ex необходимо изменить на
String regex = "^([\\d/.]+)\\s*(\\w*)\\s*(.*)$";
, но помните, что вы больше не можете преобразовывать значение первого соответствия в целое число 0,5 можно преобразовать в двойное число, но 1/2 нужно обрабатывать вручную.