在下面的代码中为什么它进入无限循环?我以为它会显示我输入的第一个短语,但他从不停止从键盘上读取。 1-为什么? 2-我怎么只能读一次?
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Type anything: ");
while(scan.hasNext()) {
System.out.println("Token: " + scan.next());
}
System.out.println("-------------------------");
scan.close();
}
}
答案 0 :(得分:2)
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNext()
来自Scanner类文档:
public boolean hasNext()
如果此扫描器的输入中有另一个标记,则返回true。这个 方法可能会在等待输入扫描时阻塞。扫描仪没有 超越任何输入。
因此,不仅hasNext()返回一个布尔值,而且还等待按下一个键(因此使调用返回true),这将通过next()调用显示。
答案 1 :(得分:2)
扫描仪正在等待文件结束"条件,我只能通过使用扫描仪从文件中读取来获得此EOF条件。如果您只想读取输入并打印一次,那么您可以执行以下操作:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Type anything: ");
System.out.println("Token: " + scan.next());
System.out.println("-------------------------");
scan.close();
}
你也可以给它一个停止的条件:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Type anything: ");
String input = scan.next();
while(!input.equals("exit")){
System.out.println("Token: " + input);
System.out.println("\nType anything: ");
input = scan.next();
}
scan.close();
}
我以前从文件中读取的内容:
public static void main(String[] args) {
File file = new File("random_text_file.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
String word = scanner.next();
System.out.println(word);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}