从文本文件读取时的数字格式异常

时间:2012-01-26 16:47:32

标签: java

这里我正在阅读每行包含一个整数的文本文件,并且我打印的所有整数都出现了不止一次。

正如您所看到的,我使用了Hash Map,并将整数分配为Key和number的出现次数作为值。

这里我得到数字格式异常。任何人都可以帮我这个吗?

package fileread;

import java.io.*;
import java.util.HashMap;


public class Main {


public static void main(String[] args) {
    // TODO code application logic here
    HashMap<Integer, Integer> lines = new HashMap<Integer, Integer>();
    try {
        FileInputStream fstream = new FileInputStream("C:/Users/kiran/Desktop/text.txt");
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String str;

        while ((str = br.readLine()) != null) {

            Integer intObj = Integer.valueOf(str);
            if (lines.containsKey(intObj)) {
                int x = 0;
                x = lines.get(intObj);
                if (x == 2) {
                    System.out.println(intObj);
                }
                lines.put(intObj, x++);

            } else {

                lines.put(intObj, 1);
            }
        }
        in.close();
    } catch (Exception e) {
        System.err.println(e);
    }
}
}

3 个答案:

答案 0 :(得分:3)

您的数字格式异常很可能发生在此行:

            Integer intObj = Integer.valueOf(str);

请参阅此处Integer.valueOf的文档

我猜这是因为其中一行不是整数

答案 1 :(得分:3)

对于调试,我想我建议在循环开头添加类似这样的内容:

System.out.println("str = \"" + str + "\"");

我在代码中看到的唯一一个你得到NumberFormatException的地方来自Integer.valueOf。我的猜测是你在str中得到一些空格或其他内容,当你尝试将其格式化为数字时,它就失败了。

或者,如果您想尝试捕捉它何时发生,您可以尝试在Integer.valueof周围添加try / catch,如下所示:

Integer intObj = null;
try
{
     intObj = Integer.valueOf(str);
}
catch(NumberFormatException nfe)
{
     System.err.println("The value \"" + str + "\" is not a number!");
}
祝你好运!

答案 2 :(得分:2)

在将str作为valueOf()方法的参数提供之前,请尝试使用trim()方法。

str = str.trim();
Integer intObj = Integer.valueOf(str);

此外,由于您使用的是文件输入/输出,为什么不使用java.nio包而不是使用旧的java.io包。那java.nio对于这种工作更好。请阅读comparison b/w java.nio and java.io

希望这可能会有所帮助。

此致