【发布时间】:2018-11-02 13:20:52
【问题描述】:
我一直在为大学活动编写此代码:我需要从 .txt 文件中读取一些行,将它们存储在 HashMap 中并根据文件中的内容打印一些结果。 这些行是一个名字和一个数字,它们是那个人的名字和年龄。 例如:
马克 23
约翰 32
.txt 文件包含一些人名,程序运行良好,但有一个例外:读取列表的第一个名称,存储在 HashMap 中,但每次我用map.get() 或@987654322 访问它@它告诉我密钥不存在。
这个问题只发生在读取的第一个名字上。 在我给出的示例中,Mark 会发生这种情况,但如果我改变行的顺序,将 John 放在首位,它会发生在他身上,而不是 标记。
请记住,键是人名,值是我为该人创建的对象 Person。
这是我的代码:
class Person {
private String name;
private int age;
//Getter
public int getAge() {
return this.age;
}
public String getName() {
return this.name;
}
//Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//toString
@Override
public String toString() {
return name + " " + age;
}
}
class OpenText {
public static void textReader(String directory) {
try {
BufferedReader file = new BufferedReader(new FileReader(directory));
String line;
String[] lineSplit;
while ((line = file.readLine()) != null) {
lineSplit = line.split(" ");
try {
int age = Integer.parseInt(lineSplit[1]);
Main.hMap.put(lineSplit[0], new Person(lineSplit[0], age));
} catch (NumberFormatException exc) {
System.out.println(exc);
}
}
file.close();
} catch (IOException exc) {
exc.printStackTrace();
}
}
}
public class Main {
public static Map<String, Person> hMap = new HashMap<>();
public static void main(String[] args) {
OpenText.textReader("DIRECTORY OF THE FILE");
System.out.println(hMap.keySet());
System.out.println(hMap.values());
System.out.println(hMap.get("John"));
}
// [John, Mark, Peter, Philip, Mary]
// [John 32, Mark 23, Peter 37, Philip 20, Mary 54]
// null
}
我想很明显我只是 Java 的新手,但任何见解都将不胜感激!
提前致谢!
【问题讨论】:
-
请给出你写的3个
print的输出 -
尝试在你的分割方法中使用
\\s+,如果有超过1个空格会有所帮助 -
使用调试器,在最后加一个step点,在一个print处,并检查keys的内容,一个一个的,看key的内容就是一个String跨度>
-
这里
lineSplit = line.split("\\s+"); -
你也可以在你的 iinput 上使用 trim(),像这样:Main.hMap.put(lineSplit[0].trim(), etc...
标签: java arraylist hashmap key readfile