我是 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() 方法)。
我确实建议您查看 Javadoc,但我会尽可能简单地为您解释。
基本上,如果给定文档包含另一个字符串,则 hasNext() 方法会返回
true
。因此,如果所述文档有另一个字符串,那么为什么片段会循环。一旦整个文档中不再有任何字符串,hasNext() 将返回false
。
这是 next() 方法的示例:
String myString = myScanner.next();
这使得 myString 等于给定文档中的下一个字符串。
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);
}
}
}