0

我正在尝试从 中添加两行tableLineScanner,这就是来自Scanner被调用的行tableScanner

无论如何,我得到了这些错误

    at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1416)
at Database.main(Database.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

但是就像下面的代码一样,我不明白为什么会出现这个错误。因为我检查他们是否有两条线路可用并且没有参与。

if((tableLineScanner.hasNextLine()&&(tableLineScanner.hasNextLine()))){  //Checks if it exists two available lines.
  fieldInput = (tableLineScanner.next() + " " + (tableLineScanner.next().replaceAll("[()]", ""))+",");
  tableFields.add(fieldInput);
  System.out.println("ADDING: " + fieldInput + " to tableField array list");
}

请帮忙 :(

4

1 回答 1

3

该方法Scanner#hasNextLine()只是告诉您是否还有可用的线路。如果你调用它两次,它仍然会告诉你,如果还有一条可用的线路。你可以称之为n时间,但它只会告诉你下一行。

打电话Scanner#nextLine(),然后你可以再次测试是否有另一条线路可用。

总是这样做:

  1. 测试是否有更多数据可用
  2. 读取数据
  3. 测试是否有更多数据可用
  4. ...

if (tableLineScanner.hasNextLine()) {
    String firstLine = tableLineScanner.nextLine();

    if (tableLineScanner.hasNextLine()) {
        String secondLine = tableLineScanner.nextLine().replaceAll(...);

        tableFields.add(firstLine + secondLine);
    } else {
        // No-second-line error handling goes here
    }
} else {
    // No-first-line error handling goes here (if any)
}
于 2013-11-25T17:45:45.950 回答