java.util.Scanner不会返回到提示

时间:2011-08-18 12:30:18

标签: java java.util.scanner

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();
    }
}

此程序不会返回提示(我已通过终端运行它)。这是为什么?我该如何纠正?

3 个答案:

答案 0 :(得分:6)

  

此程序不会返回提示(我已通过终端运行它)。为什么?

因为s.hasNext()将阻塞,直到有更多输入可用,并且只有在遇到流结束时才会返回false。

来自文档:

  

如果此扫描器的输入中有另一个标记,则返回true。 此方法可能会在等待输入扫描时阻止。

在unix系统上,您可以通过键入 Ctrl + D 来结束流,这会正确地将控制返回到提示符,(或通过键入终止整个程序) CTRL + C )。

  

如何更正?

你可以

  • 保留一些用于终止程序的输入字符串,如JJ建议的那样,或
  • 你可以依靠用户用Ctrl + D关闭输入流,或者你可以
  • 将循环包含在try / catch中,让另一个线程中断主线程然后正常退出。
  • 从另一个帖子以编程方式执行System.in.close()

答案 1 :(得分:3)

这是对上述评论的回复。在这里,应用程序将在收到“退出”时退出。

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            String temp = s.next();
            if(temp.trim().equals("quit"))
                System.exit(0);
            System.out.println(s.next());
        }
        s.close();
    }
}

答案 2 :(得分:1)

扫描仪将阻止等待来自System.in(标准输入)的输入。你必须按Ctrl + C退出程序,按Ctrl + D关闭输入流或给循环一个退出条件(比如输入“quit”),你可以这样做:

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            String nextVal = s.next();
            if (nextVal.equalsIgnoreCase("quit")) { break; }
            System.out.println(nextVal);
        }
        s.close();
    }
}