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}}
我有一个 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}}