扫描仪永远不会停止从键盘读取

时间:2018-05-28 01:14:44

标签: java java.util.scanner

在下面的代码中为什么它进入无限循环?我以为它会显示我输入的第一个短语,但他从不停止从键盘上读取。 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();
    }
}

2 个答案:

答案 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();
    }
}