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

处理文件空行时字符串转整数的异常捕获问题咨询

解决多行空行导致的数组越界与数字格式异常问题

你的问题核心是空行处理逻辑漏洞:

  • 空行执行split("\\|")后会得到长度为1的数组(内容为[""]),但你依然循环j从0到2,直接触发ArrayIndexOutOfBoundsException
  • 不管行是否有效都执行points++,导致无效行也占用数组位置,后续有效数据的存储位置错位

修改后的解决方案代码

while(scc.hasNextLine()){  
    String line = scc.nextLine().trim();
    // 跳过空行(包括带空白字符的行)
    if(line.isEmpty()){
        continue;
    }
    String[] temp = line.split("\\|");
    // 过滤格式不符合要求的行(必须是3个字段)
    if(temp.length != 3){
        continue;
    }
    try{
        // 整行解析成功才写入数组
        for(int j = 0; j < 3; j++){             
            arr[points][j] = Integer.parseInt(temp[j]);
        }
        // 仅有效行才递增数组索引
        points++;
    } catch(NumberFormatException e){
        // 解析失败的行直接跳过,可按需添加日志记录
        continue;
    }
}
scc.close();

关键优化点说明

  1. trim()+空行判断:处理编辑后可能出现的带空格/换行符的空行,确保所有无效空行都被跳过
  2. 字段长度校验:提前过滤掉字段数不等于3的异常行,避免数组越界
  3. 整行异常捕获:将try-catch放在整行解析逻辑外层,只要有一个字段解析失败,整行直接跳过,不占用数组位置
  4. 索引递增时机调整:只有成功解析完一行有效数据后,才递增points,保证数组存储位置的正确性

内容的提问来源于stack exchange,提问作者George Volz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:50:07