读取CSV文件填充对象数组时触发NumberFormatException问题求助
解决Java NumberFormatException: empty String的思路(针对populateArray()方法)
这个NumberFormatException: empty String异常本质是你在代码里尝试把一个空字符串转换成数字(比如调用Integer.parseInt("")或Double.parseDouble("")),结合你提到的是处理逗号分隔的大坝水位数据,我给你几个具体的排查和解决方向:
先定位问题行:在
populateArray()方法里,读取每一行数据后,先把行内容打印出来(比如System.out.println("正在处理行:" + currentLine);)。运行程序后,看抛出异常前最后打印的行,大概率是这一行存在格式问题——比如末尾多了逗号、中间有连续逗号(比如三峡大坝,,175),或者某个字段本身就是空白。优化字符串分割逻辑:直接用
split(",")很容易产生空字符串(比如行尾逗号会分割出最后一个空元素)。建议分割后先对每个元素做trim处理,再判断是否为空:String[] dataParts = currentLine.split(","); for (String part : dataParts) { String cleanedPart = part.trim(); if (cleanedPart.isEmpty()) { // 这里可以根据业务选择:跳过该字段、设默认值(比如0.0),或者抛出明确提示 System.out.println("发现空字段,已跳过"); continue; } // 再执行数字转换 double waterLevel = Double.parseDouble(cleanedPart); // 后续数组填充逻辑 }处理合法空值或修正数据源:如果文件里的空字段是业务允许的(比如某大坝暂无水位记录),可以给个合理默认值;如果是输入错误(比如手误多打了逗号),直接修正数据源文件会更彻底。
添加异常捕获辅助排查:在数字转换的代码块外加上try-catch,捕获异常时打印出出问题的字符串和所在行,方便精准定位:
try { double waterLevel = Double.parseDouble(cleanedPart); } catch (NumberFormatException e) { System.err.println("转换失败的字符串:'" + cleanedPart + "',所在行:" + currentLine); e.printStackTrace(); // 可选:继续处理其他数据,避免程序直接崩溃 }
内容的提问来源于stack exchange,提问作者user7796370
相关产品推荐
相关产品推荐

