亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 CSV 文件讀取時出現數字格式異常錯誤

從 CSV 文件讀取時出現數字格式異常錯誤

翻閱古今 2022-09-28 16:33:36
我有以下csv文件:No_Reduction    No_Reduction    No_Reduction    No_Reduction1               15              1               90               7               0               03               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我該如何解決這個問題?
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

讓我們給出一個非答案:當你重新發明輪子時,這樣的事情是可以預料到的。

含義:CSV解析比您想象的要難。通常,您自己的手寫解析器適用于您可以想到的輸入數據。第二次你從不同的來源向它拋出有效的CSV數據,稍微復雜一些,你的解析器就會崩潰。

所以:這個異常告訴你這個字符串不能被解析為數字,正如其他答案所解釋的那樣,這是由于其他元素的錯誤“解析”。" 1"

因此,我的建議是:如果你想有一個真正的CSV解析器,請使用現有的庫,如openCSVapache共享資源CSV。


查看完整回答
反對 回復 2022-09-28
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

看來你的是不正確的??罩岛烷L度的參數和條件不正確。我想將該方法更改為:convertCSVtoArrayListsplit


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

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

    if (pathCSV != null) {

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

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

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

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

            }

        }

    }

    return result;

}


查看完整回答
反對 回復 2022-09-28
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

它似乎試圖將“不減少”行轉換為整數,但失敗了。代碼是否進入您的 if(行.包含(“簡化”))塊?

也許添加這個只是作為測試

if(line.contains("Reduction") || line.trim().isEmpty())

也許您的輸入文件末尾有換行符?


查看完整回答
反對 回復 2022-09-28
  • 3 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號