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

读取文件映射对象时触发java.lang.NumberFormatException求助

问题排查与解决方案

核心问题定位

java.lang.NumberFormatException: For input string: "N64" 明确指向代码尝试将字符串类型的平台标识"N64"强制转换为整数类型,属于字段类型不匹配导致的解析错误。

排查步骤

  1. 核对对象字段与CSV列的类型对应关系
    检查FinalProjectRecord对象中,对应CSV里包含"N64"的列的字段类型。如果该字段被定义为int/Integer,但CSV列存储的是平台代号(字符串),必然触发转换异常。

  2. 定位测试代码第34行的逻辑
    查看FinalProjectTests.java第34行代码,确认该行是否在执行类似Integer.parseInt()的转换操作,且转换的目标值正是CSV中的"N64"字符串。

  3. 检查CSV读取映射逻辑
    如果使用第三方CSV解析库(如OpenCSV、Jackson CSV),检查字段注解或映射配置是否错误将字符串列绑定到整数字段;如果是自定义解析器,确认列索引对应的解析逻辑是否匹配字段类型。

修复方案

方案1:修正对象字段类型(推荐,符合数据语义)

如果"N64"这类值是平台的字符串标识,将FinalProjectRecord中对应字段的类型从int/Integer改为String:

// 原错误定义
private int platform;

// 修正后
private String platform;

同时调整读取代码中的解析逻辑,直接赋值字符串而非转换:

// 原错误代码
record.setPlatform(Integer.parseInt(csvRow[platformColumnIndex]));

// 修正后
record.setPlatform(csvRow[platformColumnIndex]);

方案2:添加数据映射逻辑(若需保留整数类型)

如果业务要求该字段必须为整数,需要为字符串平台标识映射对应的编码值,比如:

String platformStr = csvRow[platformColumnIndex];
int platformCode;
switch(platformStr) {
    case "N64":
        platformCode = 1;
        break;
    // 其他平台映射规则
    default:
        // 处理未知平台,可抛出自定义异常或设置默认值
        platformCode = 0;
}
record.setPlatform(platformCode);

方案3:过滤/修复CSV数据

如果CSV数据存在错误(本该是整数却混入字符串),需要修正CSV文件中的对应列数据,或者在读取时跳过无效行。

内容的提问来源于stack exchange,提问作者Ish Higareda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:25:30