我有一个包含许多记录的txt文件,每个记录有5行,是名称 - 值对 .
我已经解析了文件,并使用扫描程序将名称和值放入哈希映射中,以检测文件是否为hasNextLine .
此时因为所有记录都在同一个txt文件中,所以hashmap只包含文件中的最后一条记录 . 这是因为出现的任何重复键都将覆盖该键的值 .
我的问题是如何为每条记录创建一个新的hashmap?这是我必须构建记录的方法:
public void recordBuilder() throws FileNotFoundException{
FileReader reader = new FileReader(aFile);
Scanner outerScan = new Scanner(reader);
HashMap<String,String> record = new HashMap<String,String>();
while (outerScan.hasNextLine()){
Scanner innerScan = new Scanner(outerScan.nextLine());
try{
innerScan.useDelimiter(":");
String name = innerScan.next();
String value = innerScan.next();
String rName = name.trim();
String rValue = value.replaceAll("[^\\w]", "");
record.put(rName,rValue);
}
catch(Exception e){
}
}
for(String i : record.keySet()){
System.out.println(i + "\t" + record.get(i));
}
}
2 回答
如果我理解你的问题,你有一个文本文件:
所以你在概念上就是一个集合对象,每个对象都是一组五个名称/值对,你的目标是将所有这些对象加载到内存中 . 你有两个选择:
A
Map<String,Map<String,String>>
- 如果每组包含五个名称/值对,则包含一个唯一键(例如,与name1
关联的值),可用于区分这些组 .A
List<Map<String,String>>
- 如果组没有唯一键,则使用此选项,该文件只是这些名称/值对集的线性集合 .这是第一个选项的示例;适应第二个是作为练习:
HashMap为特定键提供了快速的值检索 . 这里每个键都映射到一个特定的值 . 因此,您不能拥有具有相同值的多个键 .