用户输入的扫描仪 EOF 处理

Scanner EOF handling for user input

提问人:Sean 提问时间:11/12/2017 最后编辑:Sean 更新时间:11/12/2017 访问量:855

问:

我正在开发一个控制台应用程序,因此我必须能够处理任何用户输入,但是当您输入EOF字符时,我无法解决扫描仪的奇怪行为。

public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String[] options = {"Login", "Register", "Quit"};
    while(true){
        for(int i = 0; i < options.length; i++)
            System.out.println(i + ": " + options[i]);
        try {
            switch(Integer.parseInt(scan.nextLine())){
                case 0:
                    login();
                    break;
                case 1:
                    register();
                    break;
                case 2:
                    return;
                default:
                    System.out,println("must be between 0 and " + (options.length - 1));
            } catch(NumberFormatException | NoSuchElementException e){
                System.err.println(e.getMessage);
                if(DEBUG)
                    e.printStackTrace();
            }
        }
    } 
}

这似乎可以覆盖用户可能尝试的任何格式错误的输入,但是当我输入我的 EOF 字符时,扫描程序将无限抛出 NoSuchElementException,而不是使用 EOF 并提示用户输入新输入。我知道EOF是什么,但是由于用户可以输入它,因此我应该对其进行处理,以允许应用程序仍然运行。

如何让扫描程序使用 EOF 令牌并继续阅读进一步的用户输入?

异常 java.util.scanner 无限循环 EOF

评论

1赞 Andreas 11/12/2017
如您所知,EOF 表示文件结束,当收到这样的字符时,它会关闭输入流。一旦关闭,就无法重新打开。System.in
0赞 Sean 11/12/2017
那么如何将程序恢复到用户输入EOF之前的某个点?扫描程序的行为必须与其他流不同,因为我可以通过该流的新实例打开一个新流,但扫描器的新实例也会无限抛出 NoSuchElementException
1赞 Andreas 11/12/2017
你不能。用户说:“不会再有输入”,所以即使用户改变主意,也不会有更多的输入。--- 问题不在于 ,而在于 .这与 无关,创建新对象包装不会改变(在 EOF 中)完成的事实。ScannerSystem.inScannerScannerSystem.inSystem.in
0赞 Sean 11/12/2017
如果应用程序没有正常终止,我可以使用包装器重新启动应用程序吗?

答: 暂无答案