java - 扫描仪在输入文件的末尾处失败

标签 java java.util.scanner

我有以下代码:

    Scanner in = new Scanner(new FileReader("in.txt"));

    while(in.hasNext()){
        System.out.println(in.nextLine());
        System.out.println(in.nextLine());
        System.out.println(in.nextDouble());
        System.out.println(in.nextDouble());
        System.out.println(in.nextDouble());

        System.out.println(in.nextLine());
    }

其中 in.txt 的格式为:

One Name
Second Name
double
double
double
One Name
Second Name
double
double
double
...

但是,while 循环在输入文件的最后一行失败。它打印整个输入文件,但是完成后我收到一条错误消息:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1585)
    at start.Start.main(Start.java:22)
Java Result: 1

最佳答案

每次读取之前都必须调用hasNext()方法,因为如果为true,该方法可以保证至少还有一个元素要读取。您的阅读内容应如下所示:

    if (in.hasNext())
        System.out.println(in.nextLine());
    if (in.hasNext())
        System.out.println(in.nextLine());
    if (in.hasNext())
        System.out.println(in.nextDouble());
    if (in.hasNext())
        System.out.println(in.nextDouble());
    if (in.hasNext())
        System.out.println(in.nextDouble());

    if (in.hasNext())
        System.out.println(in.nextLine());

关于java - 扫描仪在输入文件的末尾处失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122983/

相关文章:

java - Getter 使程序崩溃

java - 为引用变量分配默认值

java - 如何在 Java 应用程序中获取映射网络驱动器的 UNC 路径

java - Android 应用程序中套接字 DataInputStream BufferedInputStream 的消息顺序错误

java - 扫描文件内容

java - 如果没有抛出异常则返回 boolean true 表示操作成功?

Java 的新 Scanner vs Scanner.create()?

java - 对于整数来说,什么相当于 isEmpty() ?

java - 在 try-catch block 中捕获 InputMidmatchException 时无限循环

java - try catch 扫描仪