【问题标题】:Input data: java.lang.NumberFormatException: For input string: "2 "输入数据:java.lang.NumberFormatException:对于输入字符串:“2”
【发布时间】:2015-03-28 19:13:48
【问题描述】:

这是我的文本文件中的数据:

21/08/12#ESE-6329#PV/5732#30
27/08/12#PEA-4567#PV/5732#3@
11/09/12#ESE-5577#Xk/8536#2
14/09/12#PNW-1235#HY/7195#2@

这是main方法的代码:

File orderData = new File("PurchaseOrderData.txt");            
Scanner dataScan = new Scanner(orderData);

while(dataScan.hasNextLine())
{
    String lineData = dataScan.nextLine();

    Scanner lineScan = new Scanner(lineData);
    lineScan.useDelimiter("#");

    String date = lineScan.next(); // line 259
    String id = lineScan.next();
    String code = lineScan.next();

    String quantityPlus = lineScan.next();

    if(!quantityPlus.contains("@"))
        management.addNewPurchaseOrder(date, id, code, 
                                    Integer.parseInt(quantityPlus)); // line 267
    else
    {
        quantityPlus = quantityPlus.replace("@", "");
        management.addNewPurchaseOrder(date, id, code,
                                    Integer.parseInt(quantityPlus));
        management.startNewMonth();
    }

在第一个实例上

management.addNewPurchaseOrder(date, id, code, Integer.parseInt(quantityPlus));

我得到了这个例外:

java.lang.NumberFormatException: For input string: "2 "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at Assignment2.MainTest.main(MainTest.java:267)

如果我这样做:

String quantityPlus = lineScan.next();
quantityPlus = quantityPlus.replace(" ", "");

我得到以下信息:

java.util.NoSuchElementException
java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at Assignment2.MainTest.main(MainTest.java:259)

MainTest.java:259 - String date = lineScan.next();

我也尝试过使用nextInt(),但结果是一样的。那里有什么问题?

非常感谢!

【问题讨论】:

  • 第 3 行或第 4 行的 22@ 后面有没有可能有隐藏符号?
  • 究竟是哪一行抛出异常,第 3 行还是第 4 行?
  • @Sergey Pauk 是的,谢谢,找到并清除了!但是现在有:上面提到的NoSuchElementException...
  • @Sergey Pauk 我有很多行数据,这只是一个例子,但结构是一样的

标签: java parsing numberformatexception


【解决方案1】:

MainTest.java:259 - String date = lineScan.next(); 您应该先检查该行是否为空,这可能是扫描仪抛出异常的原因

【讨论】:

  • 我似乎有帮助!谢谢!但是,如果我从一个字符串中读取,它的数据正好是我提到的 .next() 的次数吗?
  • 如果您使用 while 循环,只要在当前行的末尾有一个新行字符,就会调用该循环,您可能还需要捕获此异常,以防该行是格式无效
【解决方案2】:

关于NoSuchElementException - 您的其中一条线过早结束(很可能在最后一条# 之后没有数据)。从specification 可以看出,在以下情况下会引发此异常:

@throws NoSuchElementException 如果没有更多可用的令牌

【讨论】:

  • 非常感谢您的解释!
猜你喜欢
  • 2012-12-05
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 2013-08-06
相关资源
最近更新 更多