处理文件空行时字符串转整数的异常捕获问题咨询
解决多行空行导致的数组越界与数字格式异常问题
你的问题核心是空行处理逻辑漏洞:
- 空行执行
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();
关键优化点说明
trim()+空行判断:处理编辑后可能出现的带空格/换行符的空行,确保所有无效空行都被跳过- 字段长度校验:提前过滤掉字段数不等于3的异常行,避免数组越界
- 整行异常捕获:将
try-catch放在整行解析逻辑外层,只要有一个字段解析失败,整行直接跳过,不占用数组位置 - 索引递增时机调整:只有成功解析完一行有效数据后,才递增
points,保证数组存储位置的正确性
内容的提问来源于stack exchange,提问作者George Volz
相关产品推荐
相关产品推荐

