You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:22:40