Как прочитать файл CSV в HashMap только для строк без пробелов - PullRequest
2 голосов
/ 13 марта 2020

Я выполняю довольно уникальное чтение файла CSV, но есть один уникальный аспект. Если строка имеет пустое значение ячейки только в 19-м столбце, то можно использовать go в хэш-карте. Если какой-либо другой столбец в строке имеет пустую ячейку, его следует исключить из хэш-карты. В таблице всего 22 столбца. Есть ли способ написать это if утверждение без записи каждого индекса столбца? Например if(piecesOfInfo[0] != "" && piecesOfInfo[1] != ""...)

public HashMap<String,String[]> createHashMap() {
    File flightFile = new File("fying.csv");
    HashMap<String,String[]> flightsMap = new HashMap<String,String[]>();

    try {
    Scanner s = new Scanner(flightFile);
    while (s.hasNextLine()) {
            String info = s.nextLine();
            String [] piecesOfInfo = info.split(",");
            if(/**piecesOfInfo contains no blanks aside from the 18th column**/){
            String flightKey = piecesOfInfo[4]; //Setting the Key
            String[] values = Arrays.copyOfRange(piecesOfInfo, 0, piecesOfInfo.length);

            flightsMap.put(flightKey, values);
            }
            }

    s.close();
    }


   catch (FileNotFoundException e)
   {
     System.out.println("Cannot open: " + flightFile);
   }

    return flightsMap;
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

В итоге я проделал долгий путь, перечислив каждый столбец отдельно в операторе If:

    public HashMap<String,String[]> createHashMap() {
        File flightFile = new File("flights.csv");
        HashMap<String,String[]> flightsMap = new HashMap<String,String[]>();

        try {
        Scanner s = new Scanner(flightFile);
        while (s.hasNextLine()) {

                String info = s.nextLine();
                String [] piecesOfInfo = info.split(",");
                if(piecesOfInfo[0] != "" || piecesOfInfo[1] != "" ||    piecesOfInfo[2] != "" ||    
                   piecesOfInfo[3] != "" ||     piecesOfInfo[4] != "" ||    piecesOfInfo[5] != "" ||    
                   piecesOfInfo[6] != "" ||     piecesOfInfo[7] != "" ||    piecesOfInfo[8] != "" ||    
                   piecesOfInfo[9] != "" ||     piecesOfInfo[10] != "" ||   piecesOfInfo[11] != "" ||   
                   piecesOfInfo[12] != "" ||    piecesOfInfo[13] != "" ||   piecesOfInfo[14] != "" ||   
                   piecesOfInfo[15] != "" ||    piecesOfInfo[16] != "" ||   piecesOfInfo[17] != "" ||   
                   piecesOfInfo[19] != "" ||    piecesOfInfo[20] != "" ||   piecesOfInfo[21] != "") {
                    String flightKey = piecesOfInfo[4] + "_" + piecesOfInfo[2] + "_" + piecesOfInfo[11]; //Setting the Key
                    String[] values = Arrays.copyOfRange(piecesOfInfo, 0, piecesOfInfo.length);

                    flightsMap.put(flightKey, values);
                }

        }
        s.close();
        }


       catch (FileNotFoundException e)
       {
         System.out.println("Cannot open: " + flightFile);
       }

        return flightsMap;
    }
0 голосов
/ 13 марта 2020

Может быть, это поможет:

List infoList = Arrays.asList(piecesOfInfo);
if(!infoList.contains("") || (infoList.indexOf("")==18 && infoList.lastIndexOf("")==18) ){
// non empty piecesOfInfo expect position 19
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...