我有一个文本文件,其中的数据如下:
Surrender~abc~nov@2012
Surrender~bnc~bhdgvx
Surrender~nkhjb~bcdjh
.
.
.
我想逐行分离数据,并将第二和第三列值存储在 Hashmap 中作为第二 -> 键和第三 -> 值,并检查用户输入的值是否存在于 Hashmap 中并返回 true。
我尝试了以下操作,但得到了 java.lang.ArrayIndexOutOfBoundsException: 3
..请指导。
HashMap hm = new HashMap();
FileInputStream fstream = new FileInputStream("Surrender.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] parts = strLine.split("~");
for (int i = 0; i <= parts.length; i++) {
if(!parts[i].equalsIgnoreCase("Surrender")){
String key=parts[i];
String value=parts[i++];
if(key!=null && value!=null)
hm.put(key,value);
}
}
}
System.out.println("HashMap size..." + hm.size());
in.close();
最佳答案
因为你的每一行看起来都是这样的:
Surrender~abc~nov@2012
通过~
分割后分为三部分:
投降
abc
nov@2012
这些部分的编号从 0
到 2
。
解决方案:不要循环部件
。改为这样做:
hm.put(parts[1], parts[2]);
删除这些行:
for (int i=0;i<=parts.length;i++) {
if (!parts[i].equalsIgnoreCase("Surrender")) {
hm.put(parts[i], parts[++i]);
}
}
注意:使用通用 map
:
Map<String, String> hm = new HashMap<>(); // Java 7
关于java - 将文本文件的字符串分割并存储在HashMap中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230872/