Нет такого исключения элемента, сканер дублирующих линий

Я пытаюсь добавить две строки из 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");
}

Пожалуйста помоги :(


person G.O.A.T    schedule 25.11.2013    source источник
comment
Вы не можете вызвать hasNextLine() дважды и ожидать, что у него будут две доступные линии. Вам придется позвонить next() (или лучше nextLine()), а затем снова hasNextLine().   -  person aioobe    schedule 25.11.2013


Ответы (1)


Метод 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)
}
person isnot2bad    schedule 25.11.2013
comment
Поскольку я совсем новичок в программировании, я не уверен, как это будет реализовано. ( Я чертовски устал, и у меня совсем нет сил, я скоро пойду спать) if(tableLineScanner.next(2)){? или что-то вроде того? - person G.O.A.T; 25.11.2013