【发布时间】:2019-04-02 11:25:32
【问题描述】:
所以我正在尝试在像这样构造的 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 个循环。
非常感谢任何帮助..
编辑:
为了澄清,我有一个包含 3 列的 .csv 文件,而此函数中使用了 2 列(ID 和类别)。这些通过另一个类中的读取方法传递给此函数。
我需要做的是提取每个类别的概括描述,这在所有情况下都是类别规范的第三个实例(即,总是在每个 kv 对中的第三个和第四个“>”之间)。
我的想法是简单地将所有值放在一个数组列表中,并为每个值从第三个和第四个“>”之间提取一个字符串。
【问题讨论】:
-
您发布的代码中的HashMap在哪里?
-
我建议规范化您的数据,并且不要按照您的方式存储字符串。相反,也许让每个
ID映射到一组字符串。为什么要以这种方式存储您的信息? -
@TimBiegeleisen 你是对的。我完全忘记包含数据是从读取方法传递的,该方法指定要从 .csv 文件中提取哪些列。在本例中,0 和 1 作为索引(ID 和类别)传递
-
当你说你需要检索“鸡”时,这究竟是什么意思?如果您在问题中添加更全面的问题陈述,将会有所帮助。
-
@TimBiegeleisen 添加了完整的代码和更好的问题描述。希望它澄清
标签: java split hashmap substring