如何用java中的scanner类捕获空白输入

如何用java中的scanner类捕获空白输入,java,user-input,inputstream,java.util.scanner,Java,User Input,Inputstream,Java.util.scanner,我使用scanner类从命令行捕获用户输入(仅限字符串),作为上一个示例的替代 下面看起来很好,只是空白线没有被第二个条件所吸引。例如,当我按enter键时,这应该被捕获为一个空行,第二个条件应该为true。但是,每次控制台上都会显示一个新的空行,如果我一直按enter键,整个控制台都会向上“滚动”,而不是条件对话框中的逻辑 是否有合适的方法使用scanner从命令行捕获空白输入?(某人只需按enter键,或按空格键几次,然后按enter键) 谢谢你的建议 Machine aMachine =

我使用scanner类从命令行捕获用户输入(仅限字符串),作为上一个示例的替代

下面看起来很好,只是空白线没有被第二个条件所吸引。例如,当我按enter键时,这应该被捕获为一个空行,第二个条件应该为true。但是,每次控制台上都会显示一个新的空行,如果我一直按enter键,整个控制台都会向上“滚动”,而不是条件对话框中的逻辑

是否有合适的方法使用scanner从命令行捕获空白输入?(某人只需按enter键,或按空格键几次,然后按enter键)

谢谢你的建议

Machine aMachine = new Machine();
String select;
Scanner br = new Scanner(System.in); 
 while(aMachine.stillInUse()){
  select = br.next();
        if (Pattern.matches("[rqRQ1-6]", select.trim())) {
        aMachine.getCommand(select.trim().toUpperCase()).execute(aMachine);
        }
        /*
         * Ignore blank input lines and simply
         * redisplay current status -- Scanner doesn't catch this
         */
        else if(select.trim().isEmpty()){
        aMachine.getStatus();

        /*
         * Everything else is treated
         * as an invalid command
         */
    else {                
            System.out.println(aMachine.badCommand()+select);
            aMachine.getStatus();
        }
    }
Scanner
是用于输入的文件I/O的“用于傻瓜”实现。它允许教程和教科书作者编写演示代码,而无需抱怨其复杂性

如果你真的想知道你在读什么,你必须说

BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))
…然后你就可以

String line = br.readLine()
只看到真相。

select=br.next()

。。。阻塞,直到找到合适的令牌。这意味着它将等待直到看到一个令牌返回,因此您不会从它那里得到一个空行

尝试替换以下行:

//select = br.next();    // old version with Scanner

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
try {
  select = bufferedReader.readLine();
} catch (IOException e) {
  throw new RuntimeException(e);
}
System.out.println(">" + select + "<"); // should be able to see empty lines now...
//select=br.next();//带扫描仪的旧版本
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
select=bufferedReader.readLine();
}捕获(IOE异常){
抛出新的运行时异常(e);
}

System.out.println(“>”+select+”我还想问一下,这是否是从命令行读取用户输入的正确方法。例如,我应该处理什么常见的例外情况?感谢您的任何解释挑剔,这些代码都不会从命令行读取-您的参数在main()的参数中.但你说的是标准输入。嗯,我有点不确定该采用哪种实现。在我上面链接的另一篇文章中,scanner因使用BufferedReader(new InputStreamReader(System.In))(新的InputStreamReader)而受到赞扬;Well scanner在简单性方面更好,在细粒度控制方面更差。