NumberFormatException从文本文件`解析字符串

时间:2017-04-28 02:21:57

标签: java numberformatexception

我无法将字符串解析为基元。

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

  

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

不知道从哪里开始。

在此先感谢您的努力。

5 个答案:

答案 0 :(得分:1)

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

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

将其存储为长值,如此

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

请使用long而不是int。