【发布时间】:2016-05-17 12:23:13
【问题描述】:
编辑:对不起,我是个白痴。我没有意识到我的循环对于我的测试文档数据来说太长了,最终产品将有 150 行长,但我的只有 9 行,导致错误。很抱歉浪费了您的时间,感谢您的帮助
所以我需要编写一个从文件中读取数据的程序,所述数据由“,”分隔,我使用 split 命令将其存储在数组中。每个第三个结果都是一个整数,需要这样解析,但后来我遇到了一个异常。我的代码具体..
try {
BufferedReader read = new BufferedReader(new FileReader("temp.txt"));
String file = read.readLine();
String[] store=file.split(",");
for (int i=2; i<150; i=i+3){
int result=Integer.parseInt(store[i]);
if (result>highresult){
highresult = result;
fName = store[i - 1];
sName = store[i - 2];
}
}
read.close();
} catch (IOException e) {
System.out.println("File Read Error");
}
例外情况是: 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:11 在 testing.Testing.main(Testing.java:28) Java 结果:1
在我的 for 循环内的解析器上遇到异常,我终生无法找到问题。盯着它看了这么久,我想我看到的是双重的。有什么想法吗?
为清楚起见添加 - 测试文件本身包含以下数据
姓名1,姓名1,50,姓名2,姓名2,75,姓名3,姓名3,100
使用 sysout 消息对其进行测试表明它可以正确地从数组中收集数据,问题似乎是在数组中的 [2][5][8] (50, 75, 100 在这种情况下)转换为整数。
感谢您的耐心等待,本网站还是新手。
【问题讨论】:
-
sysout the store[i] 在解析之前确保你有整数(用于调试目的 - 也许你的文件格式不正确(数字是小数,逗号作为分隔符?)跨度>
-
我在解析器之前添加了一个 sysout 并使用计数器对其进行了测试,它在数组中的指定位置正确读取了数据。我创建的测试文件如下
-
对不起,从上一个继续 - 有后续.. Name1,Sname1,50,Name2,Sname3,75,Name3,Sname3,100
-
避免在 cmets 中放入更多信息;而是更新您的问题。对于您的潜在问题:您正在重新发明轮子。因此,除非这是某种家庭作业,否则您可能需要在网上搜索现有的为您解析“csv”(逗号分隔值)的 java 库。这听起来像是一项微不足道的任务。但请放心:如果您谈论的是“真正的 csv”输入(意思是具有“未知”内容的文件)……那么编写正确的 CSV 解析器是困难。你会犯很多很多的错误;并从一个例外跳到下一个例外。
-
每当您发布有关异常的问题时,请向我们展示异常 - 现在我们只能猜测。
标签: java parsing integer filereader