Добавьте количество элементов в строке java - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть список. Я хочу сложить количество ингредиентов. Допустим, у нас есть List<String> list = Arrays.asList("1 kg chicken", "1 kg olive oil", "250g chicken", "250 g chicken");

код

        List<String> list = Arrays.asList("1 kg chicken", "1 kg olive oil", "250g chicken", "250 g chicken");

        for (int i = 0; i < list.size(); i++) {

            for (int j = 1; j < list.size(); j++) {
                if (meatList.get(i).equalsIgnoreCase((list.get(j))))
               //here to code

                    int quanity1 = Integer.valueOf(list.get(i).split(" ").toString());
                    int quanity2 = Integer.valueOf(list.get(j).split(" ").toString());

                    int qty = quanity1 + quanity2;

            }
        }

Требуемый выход : 1 кг оливкового масла, 1,5 кг курицы

Между тем следует учитывать «курицу» по обоим ингредиентам, а затем суммировать их количество.

1 Ответ

1 голос
/ 22 апреля 2020

Я думаю, что будет сложно охватить все возможности введенного текста, но вот решение, которое нужно начать с использования 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 нужно обрабатывать вручную.

...