从 CSV 文件读取时出现数字格式异常错误

我有以下csv文件:


No_Reduction    No_Reduction    No_Reduction    No_Reduction

1               15              1               9

0               7               0               0

3               1               5               1

我想读取文件并计算每行的总和。第一行是我在项目中使用的一些技术(忘记重复)。为此,我做了以下工作:


BufferedReader readerBuffer = new BufferedReader(new FileReader("location"));

BufferedWriter bw = new BufferedWriter(new FileWriter("location",true));

while ((line = readerBuffer.readLine()) != null) {

    if(line.contains("Reduction")) {

        bw.write(convertCSVtoArrayList(line).get(0)); //I want to write the technique name in the new file

        bw.write("\n");

    }else if(!line.contains("NA")) {

        ArrayList<String> data_per_class = convertCSVtoArrayList(line);                 

        List<Double> doubleList = data_per_class.stream().map(Double::valueOf).collect(Collectors.toList()); //this is line 46

        double sum = this.calculateSum(doubleList);

        bw.write(sum);

        bw.write("\n");

    }

}

bw.close();

转换列表方法:


public static ArrayList<String> convertCSVtoArrayList(String pathCSV) {

    ArrayList<String> result = new ArrayList<String>();


    if (pathCSV != null) {

        String[] splitData = pathCSV.split("\\s*,\\s*");

        for (int i = 0; i < splitData.length; i++) {

            if (!(splitData[i] == null) || !(splitData[i].length() == 0)) {

                result.add(splitData[i].trim());

            }

        }

    }


    return result;

}


请注意,如果我删除了第一行(包含的行),则错误将消失!No_Reduction


我该如何解决这个问题?


翻阅古今
浏览 155回答 3
3回答

繁花不似锦

让我们给出一个非答案:当你重新发明轮子时,这样的事情是可以预料到的。含义:CSV解析比您想象的要难。通常,您自己的手写解析器适用于您可以想到的输入数据。第二次你从不同的来源向它抛出有效的CSV数据,稍微复杂一些,你的解析器就会崩溃。所以:这个异常告诉你这个字符串不能被解析为数字,正如其他答案所解释的那样,这是由于其他元素的错误“解析”。" 1"因此,我的建议是:如果你想有一个真正的CSV解析器,请使用现有的库,如openCSV或apache共享资源CSV。

天涯尽头无女友

看来你的是不正确的。空值和长度的参数和条件不正确。我想将该方法更改为:convertCSVtoArrayListsplit&nbsp; &nbsp; public static ArrayList<String> convertCSVtoArrayList(String pathCSV) {&nbsp; &nbsp; ArrayList<String> result = new ArrayList<>();&nbsp; &nbsp; if (pathCSV != null) {&nbsp; &nbsp; &nbsp; &nbsp; String[] splitData = pathCSV.split("\\s+");&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < splitData.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (splitData[i].length() != 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.add(splitData[i].trim());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return result;}

守着一只汪

它似乎试图将“不减少”行转换为整数,但失败了。代码是否进入您的 if(行.包含(“简化”))块?也许添加这个只是作为测试if(line.contains("Reduction")&nbsp;||&nbsp;line.trim().isEmpty())也许您的输入文件末尾有换行符?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java