簡體   English   中英

如何從地圖特定數據中的文本文件讀取?

[英]How to read from text file in Map specific data?

我需要從表格的數據文件中讀取:

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,.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();

但是我只看到每行的最后一個數字。 如何解決?

每次調用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]);
}

map每個鍵與一個字符串相關聯; 每次調用put ,都將替換以前與該鍵關聯的任何字符串。

目前尚不清楚您希望結果是什么,因此我無法說出解決方法。

您的代碼將在每次迭代中覆蓋該值,並給出最后一個值作為最終值。 而是使用列表,在其中添加所有值,然后將該列表分配為地圖值。

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();

嘗試這個。 它應該工作正常。

問題是您使用相同的鍵將每個記錄存儲在行中。 通過使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM