java - 将文本文件的字符串分割并存储在HashMap中

标签 java hashmap

我有一个文本文件,其中的数据如下:

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

这些部分的编号从 02

解决方案:不要循环部件。改为这样做:

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/

相关文章:

java - 带有进度监听器的 GWT FileUpload

java - JAVA的圈复杂度范围应该是多少

java - 文件到数组 - Java

java - HashMap 没有得到预期的输出?

java - Java中检查两个字符串是否排列(Hashmap vs Array的效率)

java - 在 java 中通过键从 HashMap 中删除项目

java - HashMap.put() 覆盖已经存在的值,即使 Key 值不同

java - 如何设置 Storm worker 的 JVM 最大堆大小?

java - 如何将从 html 文本框接收到的字符串转换为数组,然后将其传输到存储过程?

java - 将数组输入到 HashMap 中