【问题标题】:NumberFormatException Unabe to parse String from text file`NumberFormatException 无法从文本文件中解析字符串`
【发布时间】:2017-04-28 02:21:57
【问题描述】:

我无法将字符串解析为原语。

File file1 = new File("bankData.txt");

                Scanner sc = new Scanner(file1);

                    while (sc.hasNext()) 
                    {
                        char c = sc.next().charAt(0);

                        if(c == 's')
                        {
                            long l = Long.parseLong(sc.next().trim());
                            String s1 = sc.next().trim();
                            String s2 = sc.next().trim();
// Line 248                 int in = Integer.parseInt(sc.next().trim());
                            String s3 = sc.next().trim();
                            double d1 = Double.parseDouble(sc.next().trim());
                            double d2 = Double.parseDouble(sc.next().trim());

                            System.out.println(s1);
                            System.out.println(l);
                            System.out.println(s1);
                            System.out.println(s2);
                            System.out.println(s3);
                            System.out.println(in);
                            System.out.println(d1);
                            System.out.println(d2);
                        }
                   }

以下代码正在生成

bankData.txtjava.lang.NumberFormatException: For input string:         "6131231234"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at bank.Bank.readFile(Bank.java:248)

这是我的程序试图读取的 bankData.txt 文件。

s 1001 John Doe 6131231234 john@john.com 1000.00 0.01 200.00

起初我认为空格是导致问题的原因,但正如您所见,我已经修剪了扫描仪返回的所有字符串,试图消除这种情况,但没有成功。看来原始变量long l = Long.parseLong(sc.next().trim()); String s1 = sc.next().trim(); String s2 = sc.next().trim(); 被成功分配;我尝试在 Eclipse 调试器中确认这一点,但它只是跳过了断点(有什么见解吗?)。 Java SE8 NumberFormatExceptionStates

抛出表明应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式。

不知道从这里去哪里。

在此先感谢您的努力。

【问题讨论】:

  • 但它只是跳过了断点看起来你还没有编译最新版本,调试器正在使用旧代码

标签: java numberformatexception


【解决方案1】:

您正在尝试转换一个大于 Java 中 Integer 最大大小的数字。

最大整数值可以是 2,147,483,647。您尝试转换为整数的字符串将包含值 6,131,231,234

像这样将它存储到一个长值中

long x = Long.parseLong(sc.next().trim());

【讨论】:

    【解决方案2】:

    int 数据类型是一个 32 位有符号二进制补码整数。它的最小值为 -2,147,483,648,最大值为 2,147,483,647。

    您的值 6131231234 大于 int max 值,6131231234 未容纳在 int 范围内,导致异常。

    请使用 long 而不是 int。

    【讨论】:

      【解决方案3】:

      我认为数字字符串超出了整数范围,你应该在那里使用 Long.parseLong() 它应该可以工作。

      【讨论】:

        【解决方案4】:

        好吧,事实就是这样:Integer.parseInt() 接受一个字符串参数,如果参数包含空格,该方法将抛出异常。但是如果param的值大于Integer.MAX_VALUE,也会抛出异常。

        Integer.MAX_VALUE 是 2147483647,小于你的“6131231234”,所以你应该使用 Long.parseLong()

        【讨论】:

          【解决方案5】:

          String str = sc.next().trim(); 每次在你想使用 str 之前;只需使用 System.out.printf("%s%n",str); 测试它到底是什么。你可以找到错误的地方

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多