Как исправить ошибку java.util.NoSuchElementException при чтении текста из файла с помощью сканера? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь найти определенную строку в файле через запятую с Java. После этого я хочу напечатать следующее значение через запятую в файле, и я не знаю, как это сделать.

import java.util.Scanner; импорт java.util. *;

открытый класс readinfile {

public static void main (String[] args)  {
    String filepath = "C://adi//test1.txt"; 
    String searchTerm = "glove";
    readRecord(searchTerm, filepath);
} 

public static void readRecord(String searchTerm, String filepath) {
    boolean found = false;
    String clothing1 =  ""; 
    String clothing2 = ""; 
    String clothing3 = "";

    Scanner x = new Scanner((filepath)); 
    x.useDelimiter("[,\n]");

    while(x.hasNext() && !found) {

        clothing1 = x.next(); 
        clothing2 = x.next(); 
        clothing3 = x.next(); 

        if(ID.equals(searchTerm)) {
            found = true;
            x.close(); 
        }

    } 

    if (found) {
        System.out.println(searchTerm + "was found in the text file");

    } else {
        System.out.println("Record not found");
    } 
} 

}

Я всегда получаю сообщение об ошибке java.util.NoSuchElementException, которое, по-видимому, является проблемой со сканером. Я не уверен, как это исправить, и надеюсь на некоторую помощь.

1 Ответ

1 голос
/ 15 июня 2019

У вас есть три x.next() внутри вашего while(x.hasNext()) цикла. Так что, если у вас есть один или два элемента в начале цикла, цикл запустится, и вы попытаетесь получить три элемента, и, вероятно, именно поэтому вы получаете это исключение.

Простое, но не очень элегантное решение будет выглядеть примерно так:

while(x.hasNext() && !found) {
    if(x.hasNext()){clothing1 = x.next();} 
    if(x.hasNext()){clothing2 = x.next();}
    if(x.hasNext()){clothing3 = x.next();}

    if(ID.equals(searchTerm)) {
        found = true;
        x.close(); 
    }

}

Вы все еще хотели бы сделать что-то с возможностью того, что clothing2 и clothing3 могут быть не назначены.

Тебе было бы гораздо лучше сделать это с массивом, но сейчас у меня нет времени объяснять это.

...