Java抛出NumberFormatException

时间:2011-02-03 22:11:02

标签: java string integer

我有一个文本文件,其中前两行是整数mn,然后有m行,每行都有n个竖线分隔的值。我编写了一个程序来读取文件并使用文件中的值创建m*n数组,并且它工作正常数百次,然后突然出现,使用相同的代码,使用相同的文件,它抛出{从第一行读取整数时{1}}。整个代码在这里:

NumberFormatException

真正让我担心的是,相同的代码在此之前和之外都运行良好,结果证明是坏的,所以我甚至无法确定究竟是什么问题......

5 个答案:

答案 0 :(得分:1)

两个可能的问题是:

st = Integer.valueOf(rdr.readLine());
el = Integer.valueOf(rdr.readLine());

您需要确保读者正在阅读的内容实际上是Integer

尝试以下小修改:

st = Integer.valueOf(rdr.readLine().trim());
el = Integer.valueOf(rdr.readLine().trim());

如果不能解决问题,您需要确保捕获正确的输入。

为了帮助调试问题,将输入保存到字符串并打印它以查看它在尝试解析之前的样子可能会有所帮助:

String stStr = rdr.readLine().trim()
System.out.println(stStr);
st = Integer.valueOf(stStr);
System.out.println(stStr);
String elStr = rdr.readLine().trim();
el = Integer.valueOf(elStr);

如果打印的值不是整数,则输入错误。

答案 1 :(得分:1)

某些东西肯定已经改变了,否则它就是魔术。可能的嫌疑人:

  • 输入文件的内容已更改。你有没有用某种十六进制编辑器检查它。文件是否以数字开头?
  • Java /系统区域设置已更改。之前被视为数字的内容,不再是新语言环境中的数字。具有区域设置的典型捕获是数千个分隔符(,)。

答案 2 :(得分:0)

你没有碰巧以某种方式在文件的第一行之前放置一些特殊字符吗?我知道我曾经遇到过这个问题,我花了很长时间才弄清楚发生了什么。我认为notepad ++会让你看看是否是这种情况。

答案 3 :(得分:0)

如果行为发生了变化,确实发生了变化。

如果代码没有改变,则:

  • 正在读取的文件已更改:使用十六进制编辑器查找特殊(不可读)字符。如果您有一个不会导致异常的输入文件,那么请将其与执行该操作的文件进行比较(再次,十六进制比较)。
  • java环境发生了变化:检查Java虚拟机配置的变化,特别是locale

答案 4 :(得分:0)

变化:

       st = Integer.valueOf(rdr.readLine());
        el = Integer.valueOf(rdr.readLine());

 String input = rdr.readLine();
 try {
     st = Integer.valueOf( input);
 } catch( NumberFormatException  e){
    System.out.println( "exception reading " + input );
 }
 input = rdr.readLine();
 try {
     el = Integer.valueOf(input);
 } catch( NumberFormatException  e){
    System.out.println( "exception reading " + input );
 }

并且您将获得打印出问题字符串的答案。