Java:从 CSV 传递到 HashMap 并打印键和值

Java: pass from CSV into HashMap and Print Key and values

我有一个 CSV 文件,有 5 行,每行用逗号分隔三段数据。 行示例:Drew, 37, 150.5 我正在尝试将数据从 CSV 读取到 HashMap,然后打印出 HashMap 键和值。现在我只打印空括号。下面的代码,我正在参加在线课程并且无法联系到教授,并且尝试了几种在线资源,感谢任何人的建议,以便我可以学习。泰!

import java.io.FileNotFoundException;  // Import this class to handle errors
import java.util.Scanner; // Import the Scanner class to read text files
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map<String, Person> myPeople = new HashMap();
    try {
      File myObj = new File("people.csv");
      Scanner myReader = new Scanner(myObj);
      while (myReader.hasNextLine()) {
        String data = myReader.nextLine();
        
        System.out.println(myPeople);
      }
      myReader.close();
    } catch (FileNotFoundException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
}```
My current output is below, without keys or values.
 java -classpath .:/run_dir/junit-4.12.jar:target/dependency/* Main
{}
{}
{}
{}
{}
 

您应该打印数据而不是 myPeople,因为您还没有向 myPeople 添加任何内容。

您可以使用 myPeople.put(key, value) 向地图添加元素,请参阅 https://www.geeksforgeeks.org/hashmap-put-method-in-java/

然后可以使用myPeople.get(key)取值,见https://www.geeksforgeeks.org/java-util-hashmap-in-java-with-examples/.

您还没有向地图添加任何内容,这就是它在每次迭代时只打印空地图 ({}) 的原因。以下是如何执行此操作的示例:

public class Main {

    static class Person {
        String name;
        int age;
        int height;

        public Person(String name, int age, int height) {
            this.name = name;
            this.age = age;
            this.height = height;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return age == person.age && height == person.height && name.equals(person.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, age, height);
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", height=" + height +
                    '}';
        }
    }

    private static final String csv =
            "Drew, 37, 168\n" +
                    "Bob, 30, 170";

    public static void main(String[] args) {
        Map<String, Person> map = new HashMap<>();
        try (Scanner scanner = new Scanner(csv)) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                String[] lineParts = line.split("\s*,\s*");
                map.put(lineParts[0], new Person(lineParts[0], Integer.parseInt(lineParts[1]), Integer.parseInt(lineParts[2])));
            }
        }
        System.out.println(map);
    }
}

输出: {Bob=Person{name='Bob', age=30, height=170}, Jack=Person{name='Jack', age=37, height=168}}