Java 从文本文件读取时出现数字格式异常
在这里,我正在读取文本文件,其中每行包含一个整数,并且我正在打印所有多次出现的整数 正如你们所看到的,我使用了散列映射,我把整数作为键,把数字的出现次数作为值 这里我得到了数字格式异常。有人能帮我吗Java 从文本文件读取时出现数字格式异常,java,Java,在这里,我正在读取文本文件,其中每行包含一个整数,并且我正在打印所有多次出现的整数 正如你们所看到的,我使用了散列映射,我把整数作为键,把数字的出现次数作为值 这里我得到了数字格式异常。有人能帮我吗 package fileread; import java.io.*; import java.util.HashMap; public class Main { public static void main(String[] args) { // TODO code appli
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);
}
}
}
您的数字格式异常很可能发生在这一行:
Integer intObj = Integer.valueOf(str);
有关详细信息,请参阅文档
我猜这是因为其中一行不是整数很可能在这一行发生数字格式异常:
Integer intObj = Integer.valueOf(str);
有关详细信息,请参阅文档
我猜这是因为其中一行不是整数用于调试,我建议在循环的开头添加类似于这一行的内容: System.out.printlnstr=\+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!");
}
祝你好运 对于调试,我建议在循环的开头添加类似于这一行的内容: System.out.printlnstr=\+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!");
}
祝你好运 在将str作为valueOf方法的参数提供之前,请尝试使用trim方法
str = str.trim();
Integer intObj = Integer.valueOf(str);
而且,既然您使用的是文件输入/输出,为什么不使用java.nio包而不是旧的java.io包呢。java.nio更适合这种工作。请为我读这篇文章
希望这能有所帮助
在将str作为valueOf方法的参数提供之前,请尝试使用trim方法
str = str.trim();
Integer intObj = Integer.valueOf(str);
而且,既然您使用的是文件输入/输出,为什么不使用java.nio包而不是旧的java.io包呢。java.nio更适合这种工作。请为我读这篇文章
希望这能有所帮助
关于异常消息将显示它试图解析为整数的内容。是否需要DataInputStream?这可能是问题的原因吗?@nicholas.hauschild是的,数据输入流似乎没有必要。您应该能够将fstream直接传递到BufferedReader构造函数中。@sgusc InputStreamReader仍然是必需的,因为BufferedReader只有两个都需要Reader的构造函数。@nicholas.hauschild-Bah,谢谢。我说得不对。我的意思是你可以在=。。。并通过fstream而不是in。我的意思并不是说你应该摆脱InputStreamReader。感谢您捕捉到这一点。异常消息将显示它试图作为整数解析的内容。是否需要DataInputStream?这可能是问题的原因吗?@nicholas.hauschild是的,数据输入流似乎没有必要。您应该能够将fstream直接传递到BufferedReader构造函数中。@sgusc InputStreamReader仍然是必需的,因为BufferedReader只有两个都需要Reader的构造函数。@nicholas.hauschild-Bah,谢谢。我说得不对。我的意思是你可以在=。。。并通过fstream而不是in。我的意思并不是说你应该摆脱InputStreamReader。谢谢你捕捉到这个。这是唯一可以抛出异常的地方。它可以很简单,比如在文件末尾加一个空行。在该行上放置断点甚至println来检查'str'的值会找出违规者。这是唯一可以抛出异常的地方。它可以很简单,比如在文件末尾加一个空行。在该行上放置断点甚至println来检查'str'的值会找出违规者。+1表示trim。文件中的非打印字符导致的文件扫描次数比我愿意承认的要多。@Perception:我也有同样的担忧:-谢谢你,并感谢+1提到修剪。文件中的非打印字符导致的文件扫描次数比我愿意承认的还要多。@Perception:我也有同样的担忧:-谢谢你和问候