如何从Map特定数据中的文本文件中读取?

时间:2016-10-07 13:35:14

标签: java file dictionary

我需要从表格的数据文件中读取:

1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065 2,12.72,1.81,2.2,18.8,86,2.2,2.53,.26,1.77,3.9,1.16,3.14,714 2,12.08,1.13,2.51,24,78,2,1.58,.4,1.4,2.2,1.31,2.72,630 .................................... 3,13.11,1.9,2.75,25.5,116,2.2,1.28,.26,1.56,7.1,.61,1.33,425 3,13.23,3.3,2.28,18.5,98,1.8,0.83,.61,1.87,10.52,.56,1.51,675 ................等等

第一个符号 - 键,其余为值。

我试着这样做

 Map<String, String> map = new HashMap<String, String>();
            BufferedReader in = new BufferedReader(new FileReader("wine.data.txt"));
            String line = "";
            while ((line = in.readLine()) != null) {
                String parts[] = line.split(",");
                for(int i = 1; i < parts.length; i++)
                map.put(parts[0], parts[i]);
                System.out.println(map.toString());
            }
            in.close();

但我只看到每一行的最后一个数字。 如何解决?

4 个答案:

答案 0 :(得分:1)

每次调用put时,都会替换特定键的值。

您希望将结果存储在Map<String, List<String>>

String parts[] = line.split(",");
List<String> values = map.get(parts[0]);
if(values == null) {   // first time this key is found -> create new list
    values = new ArrayList<>();
    map.put(parts[0], values);
}
for(int i = 1; i < parts.length; i++) {
    values.add(parts[i]);
}

答案 1 :(得分:0)

map将每个键与一个字符串相关联;每次拨打put时,替换任何与该密钥相关联的字符串。

我们不清楚你想要的结果,所以我不能说如何解决它。

答案 2 :(得分:0)

您的代码将覆盖每次迭代中的值,并将最后一个值作为最终值。 而是使用列表,在那里添加所有值,并将该列表指定为映射值。

Map<String, List<String>> map = new HashMap<String, List<String>>();
            BufferedReader in = new BufferedReader(new FileReader("wine.data.txt"));
            String line = "";
            while ((line = in.readLine()) != null) {
                String parts[] = line.split(",");
                ArrayList<String> arrList = new ArrayList<String>();
                for(int i = 1; i < parts.length; i++)
                    arrList.add(parts[i]);
                map.put(parts[0], arrList);
                System.out.println(map.toString());
            }
            in.close();

试试这个。它应该工作正常。

答案 3 :(得分:0)

问题是您使用相同的密钥存储行中的每个记录。它必须通过使用List而不是String作为map中的值来进行一些基本的更改。最后,您将使用自己的键(第一个记录)将每行中的所有项目作为itemList。以下是基于您的代码的实现:

Map<String, ArrayList<String>> map = new HashMap<>();
BufferedReader in = new BufferedReader(new FileReader("wine.data.txt"));
String line = "";
while ((line = in.readLine()) != null) {
      String parts[] = line.split(",");
      ArrayList<String> valueList = new ArrayList<>(Arrays.asList(parts));
      valueList.remove(0);// get rid of 1st element because it will be used as akey
      map.put(parts[0], valueList);
      System.out.println(map.toString());
}
in.close();