这里我正在阅读每行包含一个整数的文本文件,并且我打印的所有整数都出现了不止一次。
正如您所看到的,我使用了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);
}
}
}
答案 0 :(得分:3)
答案 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
希望这可能会有所帮助。
此致