java - 如何读取文件并保存到 hashmap 中,然后将第一个元素保存为键,其余元素保存在集合中?

标签 java

我正在阅读一个包含疾病名称及其治疗方法的文件。因此,我想将名称保存为键,并将补救措施保存为值。我怎样才能达到这个目标?我的代码似乎有一些问题。

public static HashMap<String,Set<String>> disease = new HashMap <> ();

public static void main(String[] args) {

Scanner fin = null;
    try {

        fin = new Scanner (new File ("diseases.txt"));
        while (fin.hasNextLine()) {
            HashSet <String> remedies = null;
            String [] parts = fin.nextLine().split(",");            
            int i = 1;
            while (fin.hasNext()) {
                remedies.add(parts[i].trim());
                i++;
            }

            disease.put(parts[0],remedies);


        }
        fin.close();
        }catch(Exception e) {
        System.out.println("Error: " + e.getMessage());
    }
    finally {
        try {fin.close();} catch(Exception e) {}
    }
    Set <String> result = disease.get("thrombosis");
    display(result);

    public static <T> void display (Set<T> items) {
    if (items == null)
        return;
    int LEN = 80;
    String line = "[";
    for (T item:items) {
        line+= item.toString() + ",";
        if (line.length()> LEN) {
            line = "";
        }
    }
    System.out.println(line + "]");
}

这是我的代码

癌症、疼痛、肿胀、出血、体重减轻

痛风、疼痛、肿胀 甲型肝炎、变色、不适、疲倦

血栓、心率高

糖尿病、尿频

这是 txt 包含的内容。

最佳答案

在您的代码中,您尚未初始化补救措施 HashSet(这就是它在第 14 行抛出 NullPointerException 的原因)。 第二个问题是: i 增加 1 并且您没有检查 pats 数组的大小( i > parts.length )。 我编辑了你的代码:

    Scanner fin = null;
    try {

        fin = new Scanner(new File("diseases.txt"));
        while (fin.hasNextLine()) {
              HashSet<String> remedies = new HashSet<String>();
            String[] parts = fin.nextLine().split(",");
            int i = 1;
            while (fin.hasNext()&&parts.length>i) {
                remedies.add(parts[i].trim());
                i++;
            }

            disease.put(parts[0], remedies);


        }

关于java - 如何读取文件并保存到 hashmap 中,然后将第一个元素保存为键,其余元素保存在集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51588500/

相关文章:

Java ME - 寻求教程

java - 使用 For 循环初始化 JTextFields 和 JLabels 并将其添加到 JPanel 使用数组会导致错误

java - 如何使用 Jersey 测试框架测试 @WebServlet? (抛出 Http 404 not found)

java - 在 Java 中以类型安全的方式表示 JSON

java - 如何使用 Java 获取 chromedriver 进程 PID?

java - 通过删除字符而不是删除次数来制作字谜后打印两个字符串?

java - 使用 Swing 的 JTextField 在 Java 中打印屏幕

java - Swing 按钮的外观和感觉取决于尺寸?

java - Java解析XML文档YQL查询

java - 试图让一个签名的小程序在浏览器中工作但惨遭失败