Java处理CSV文件int类型转换及数组问题(新手求助)
问题分析与修复方案
嘿,我看了你的代码,发现几个核心问题导致你处理int类型时遇到麻烦,甚至程序没法正常运行,来一步步帮你理清楚并修复:
1. 错误地把整行CSV转成整数
你写的int digit = Integer.valueOf(line);是大问题!line是整行的CSV数据(比如类似"2023-08-11,Arsenal,Man Utd,2-1,..."这样的字符串),直接把整行转成整数不仅运行时会抛出NumberFormatException,这也根本不是你想要的操作对吧?你应该是想提取某一列的数值(比如第12列的射门数,对应数组索引11)。
2. 无意义的数组创建
int[] shotsarr = new int[digit];这行完全没必要,你不需要新创建一个数组,直接把对应列的字符串转成整数就行,多此一举反而会引入错误。
3. 重复拆分字符串浪费资源
你两次调用line.split(csvSplitBy)生成tie和ref数组,这完全是冗余操作,复用一个数组就够了,既省内存又更简洁。
修复后的完整代码
package readcvs; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class ReadCVS { public static void main(String[] args) { ReadCVS obj = new ReadCVS(); obj.run(); } public void run() { String csvFile = "/Users/hobbit/Desktop/E0.csv"; BufferedReader br = null; String line = ""; String csvSplitBy = ","; try { br = new BufferedReader(new FileReader(csvFile)); // 如果你的CSV第一行是表头(比如有HomeTeam、AwayTeam这类字段名),就把这行打开跳过表头 // br.readLine(); while ((line = br.readLine()) != null) { // 只拆分一次,把所有列数据存在data数组里,后续直接用这个数组 String[] data = line.split(csvSplitBy); // 输出对阵信息 System.out.println(data[2] + " vs " + data[3]); // 输出裁判信息 System.out.println("Referee: " + data[10]); // 提取射门数列(索引11),转为int类型 try { int homeShots = Integer.parseInt(data[11]); System.out.println("Home team shots: " + homeShots); } catch (NumberFormatException e) { // 万一这列不是有效数字(比如表头、空值或者脏数据),捕获异常给出提示 System.out.println("⚠️ Home team shots data invalid: " + data[11]); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
关键修复细节
- 只执行一次
line.split(),结果存在data数组里,所有列的提取都复用这个数组,避免重复劳动。 - 直接针对你需要的列(
data[11])用Integer.parseInt()转成int,而不是整行转换——这才是你真正需要的操作。 - 加了内层的
try-catch处理数据异常情况:比如该列是空字符串、非数字字符,或者CSV格式错位导致索引越界(你还可以额外加判断,比如先检查data.length > 11再提取,进一步避免报错)。 - 注释里提到了如果CSV有表头可以跳过,避免处理表头时的转换错误,你可以根据自己的文件情况选择是否启用。
内容的提问来源于stack exchange,提问作者Alex List
相关产品推荐
相关产品推荐

