hasNext() in a While 的作用是什么?

问题描述 投票:0回答:2

我是 Java 新手,我正在尝试从 .txt 文件读取数据。我已经在“in”中实现了一个 Scanner 对象

Scanner in=new Scanner("file.txt");
,然后将代码向下循环遍历文件的内容。文件中有多行数据,每行有三个字符串(安全号,名字,姓氏:01 托马斯·安德森)

while(in.hasNext()){
    String ss = in.next();
    String FName=in.next();
    String LName=in.next();
    
    System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n",ss,FName,LName);
    }

那么,hasNext() 方法有什么作用呢?它是否查找行尾或文件中的最后一行或者......?

请详细说明上述代码片段的工作原理(也请提及 next() 方法)。

java while-loop java.util.scanner
2个回答
0
投票

我确实建议您查看 Javadoc,但我会尽可能简单地为您解释。

基本上,如果给定文档包含另一个字符串,则 hasNext() 方法会返回

true
。因此,如果所述文档另一个字符串,那么为什么片段会循环。一旦整个文档中不再有任何字符串,hasNext() 将返回
false

这是 next() 方法的示例:

String myString = myScanner.next();
这使得 myString 等于给定文档中的下一个字符串。


0
投票

Javadoc 说:

有下一个
公共布尔 hasNext()

如果此扫描器的输入中有另一个令牌,则返回 true。这 方法可能会在等待输入扫描时阻塞。扫描仪不 超越任何输入。

下一个
公共字符串下一个()

从此扫描仪查找并返回下一个完整令牌。 A 完整标记的前面和后面是与匹配的输入 分隔符模式。该方法可能会在等待输入时阻塞 扫描,即使先前调用 hasNext() 返回 true。

要读取所有文件行,您必须检查每行是否都有标记。然后你调用 next 方法 3 次,因为你知道每行会有 3 个令牌:

import java.io.File;
import java.util.Scanner;

public class FLoader {

    public void load(String path) {
        Scanner in = null;

        try {
            in = new Scanner(new File(path));
            while (in.hasNext()) {  
                String ss = in.next();
                String FName = in.next();
                String LName = in.next();

                System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n", ss, FName, LName);
            }

        } catch (Exception e) {
            System.err.println("Loading file failed");
            e.printStackTrace();
            System.exit(-1);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.