【问题标题】:File reader finding exception文件阅读器发现异常
【发布时间】: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


【解决方案1】:

好吧,我可以看到 2 个问题:要么 store[i] 不是 int,要么你想得到一个超出数组边界的值

在解析之前打印出 i 并查看它的值,如果它是

【讨论】:

  • 按要求完成,两个值都正确输出,[I] 按预期以 3 的间隔输出,从 2 开始,并且从文件中打印的值也正确输出。它只是不喜欢从字符串中解析整数。
  • 但是最后打印出来的“i”是什么?因为 ArrayIndexOutOfBoundsException 出现在这样的情况下:如果你的数组最多有 150 个元素,你不能得到第 151 个或第 152 个元素,因为它不存在;当我阅读你的代码时,它可能会尝试从数组中获取第 151 个或第 152 个元素
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
相关资源
最近更新 更多