【问题标题】:Scanner NoSuchElementException when calling .next() method调用 .next() 方法时扫描仪 NoSuchElementException
【发布时间】:2013-04-24 14:36:15
【问题描述】:

在 Java 中,我得到了这个异常:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at com.reading.text.Activity3.readFile(Activity3.java:22)
    at com.reading.text.Activity3.main(Activity3.java:10)

来自此 Java 代码:

public static void main(String args[])
{
    readFile("C:/Users/forsakendoll/Desktop/boom.txt");
}

public static void readFile(String path) {
    Scanner file = null;
    try {
        file = new Scanner(new File (path));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        while (file.hasNext()) {
            for(int counter = 0 ; counter < file.next().length(); counter ++) {
                System.out.println(file.next().charAt(counter));    
            }
        }
    }
}

异常被抛出

System.out.println(file.next().charAt(counter));

异常是什么意思?

【问题讨论】:

  • 除了以下答案之外,您不应该在 finally 块中读取文件的代码,目前即使找不到文件,程序仍会尝试读取它。您应该将代码从 finally 移到 try 块中。
  • @BruteForce 真的非常感谢兄弟。我确实很傻。我没有意识到这一点。

标签: java file nosuchelementexception


【解决方案1】:

您在循环的每次迭代中调用.next() 两次,所以当您接近末尾时,您会跳出列表末尾,编译器会告诉您那里什么都没有。

而不是这个:

for(int counter = 0 ; counter < file.next().length(); counter ++) {
    System.out.println(`file.next()`.charAt(counter));    
}

改为这样做:

String temp = file.next();
for(int counter = 0 ; counter < next.length(); counter ++) {
    System.out.println(temp .charAt(counter));    
}  

SEE HERE

【讨论】:

  • 嘿兄弟,我怎么给.next()打了两次电话?
  • @user1708134 file.next().length()
【解决方案2】:

不要调用 next() 这么多次! 当你调用它时,它实际上会转到下一个元素。如果您需要多次使用它,请将其放在变量中并使用它。

        String next = file.next();
        for(int counter = 0 ; counter < next.length(); counter ++) {
            System.out.println(next.charAt(counter));    
        }

【讨论】:

    【解决方案3】:

    Scanner.next() 方法将内部迭代器沿一个移动。你的代码应该是:

    public static void readFile(String path) {
        Scanner file = null;
        try {
            file = new Scanner(new File (path));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            while (file.hasNext()) {
                String next = file.next();
                for(int counter = 0 ; counter < next.length(); counter ++) {
                    System.out.println(next.charAt(counter));    
                }
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多