Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文本文件读取时出现数字格式异常_Java - Fatal编程技术网

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:我也有同样的担忧:-谢谢你和问候