0

我有一个使用 Scanner 类的方法的问题。我正在用 Scanner 读取我的文本文件,然后将 int 解析为一个数组。

public static void readItems() 
{
    try 
    {
        File file = new File(System.getProperty("user.home") + "./SsGame/item.dat");
        Scanner scanner = new Scanner(file);
        int line = 0;
        while (scanner.hasNextLine())
        {
            String text = scanner.nextLine();
            text = text.replaceAll("\\W", "");
            System.out.println(text.trim());
            PlayerInstance.playerItems[line] = Integer.parseInt(text);
            line++;
        }
        scanner.close();
    } catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    } catch (NumberFormatException e2)
    {
        e2.printStackTrace();
    }
}

这是 item.txt 文件:

1
1
2
3
4

我运行代码并得到以下输出:

1

我试过使用scanner.hasNextInt() 和scaner.nextInt(); 为此,但它根本不会打印任何东西。

如果我删除 parseInt 部分,则文件将完成读取并打印所有数字。有任何想法吗?

这是抛出的异常:

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at game.player.ReadPlayer.readItems(ReadPlayer.java:56)
at game.player.ReadPlayer.read(ReadPlayer.java:11)
at game.Frame.<init>(Frame.java:32)
at game.Frame.main(Frame.java:54)
4

3 回答 3

8

我猜Integer.ParseInt()NumberFormatException因为你的行仍然包含\n.

如果您Integer.ParseInt(text.trim())改为打电话,它可能会解决它。

如果您Exception处理得当,我们会有更好的主意。

于 2013-08-08T19:22:05.750 回答
0

这是因为,在解析整数时,您有一个 NumberFormatException。

在 catch 部分添加类似这样的内容

System.out.println(e.getCause());

看,你有一个例外,这就是为什么这段代码只打印第一个数字。

于 2013-08-08T19:23:21.733 回答
0

使用扫描仪时需要小心。

如果您正在读取更多数据,那么使用 Scanerinput.nextInt();将只读取一个 int。回车不nextInt. 一种解决方案是添加input.nextLine();,以便它移动到下一行。

其他解决方案是,我更喜欢使用BufferedReader;

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String tempStr = bufferRead.readLine();

    // Do some operation on tempStr

希望这可以帮助。

于 2013-08-08T19:25:54.533 回答