使用扫描仪从文件中读取文本时,如何解决java.util.NoSuchElementException错误?

时间:2019-06-15 14:56:36

标签: java file java.util.scanner

我正在尝试使用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 个答案:

答案 0 :(得分:1)

您的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(); 
    }

}

您仍然想对可能未分配clothing2clothing3的可能性做些什么。

使用数组来完成此操作会更好,但是我现在没有时间对此进行解释。