如何读取文件,以便对于包含特定字符串的每一行,将其下方的行保存到HashMap中?

问题描述

我承认这可能是一个简单的问题,但我似乎无法对此问题思索。假设我正在使用Java中的BufferedReader读取一个.txt文件,该文件可能看起来像这样:

Category: Dairy
Yogurt
Cheese
Butter
Category: vegetables
Carrots
Cucumbers
Category: Snacks
Granola Bars
Trail Mix
Chips
Candy
Pop Tarts

我想创建一个HashMap,例如 groceries ,它将这些项目映射到其各自的类别。例如:

groceries.put("item","category");

我如何以跟踪哪个项目属于哪个类别的方式读取此文件,以便以有意义的方式将其放入HashMap?这是到目前为止我尝试过的粗略想法。 (我最初尝试使用ArrayLists,但发现HashMaps可能会更好地映射数据)

BufferedReader in = new BufferedReader(new InputStreamReader(system.in));
        String line;
        while ((line = in.readLine()) != null) {
            if (line.contains("Category")){
                
                  (save in an arrayList() called Category)

            }
            else{
                  (save in arrayList() called Item)
            }
        }

同样,这就是我最初尝试过的。让我知道是否需要进一步澄清。

解决方法

这可以激发灵感(在任何人关闭它之前): 您要构建的结构是地图(键值结构)而不是列表。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)));
String line;
String currentCategory = "";
Map<String,String> groceries = new HashMap<>();
while ((line = in.readLine()) != null) {
    if (line.startsWith("Category: ")) {
        currentCategory = line.substring(10);
    } else {
        groceries.put(line,currentCategory);
    }
}