Итак, я пытаюсь получить определенные подстроки в значениях в Hashmap, сконструированном следующим образом.
HashMap<ID, "Home > Recipe > Main Dish > Chicken > Chicken Breasts">
Который передается из другого метода, который возвращает HashMap
В приведенном выше примере мне нужно получить курицу.
Пока у меня есть ..
public static ArrayList<String> generalize() {
HashMap<String, String> items = new HashMap<>();
ArrayList<String> cats = new ArrayList<>();
items = RecSys.readInItemProfile("PATH", 0, 1);
for(String w : items.values()) {
cats.add(w);
}
for(String w : cats) {
int e = w.indexOf('>', 1 + w.indexOf('>', 1 + w.indexOf('>')));
String k = w.substring(e+1);
System.out.print(k);
e = 0;
}
System.out.println("k" + cats);
return cats;
}
Где я пытаюсь обнулить String e для каждой итерации (я знаю, что это избыточно, но это было просто для проверки).
В моем наборе данных первая пара k-v -
3880=Home > Recipes > Main Dish > Pasta,
Мой вывод
Pasta
Что нормально. Если их больше 3x,>>, будут возвращены все следующие категории. Оптимально, что это не будет делать, но это нормально, если это так. Тем не менее, в дальнейшем, по-видимому, случайным образом возвращается
Home > Recipe
Вместе с остальными данными ...
Я полагаю, это происходит в 6-м цикле.
Любая помощь приветствуется.
Edit:
Чтобы уточнить, у меня есть файл .csv, содержащий 3 столбца, тогда как 2 используются в этой функции (идентификатор и категория). Они передаются этой функции методом чтения в другом классе.
Что мне нужно сделать, это извлечь обобщенное описание каждой категории, которое во всех случаях является третьим экземпляром спецификации категории (то есть всегда между третьим и четвертым «>» в каждой паре k-v).
Моя идея состояла в том, чтобы просто поместить все значения в массив, и для каждого значения извлечь строку между третьим и четвертым ">".