【问题标题】:how to catch blank input with scanner class in java如何在java中使用扫描仪类捕获空白输入
【发布时间】:2009-11-15 15:25:14
【问题描述】:

我正在使用扫描程序类从命令行捕获用户输入(仅限字符串),作为我之前的 question 的替代方法。

以下似乎工作正常,除了空白行没有被第二个条件捕获。例如,当我按下回车键时,这应该被捕获为一个空行,并且第二个条件应该为真。但是每次都会在控制台上显示一个新的空白行,如果我一直按回车,整个控制台都会向上“滚动”,而不是条件中的逻辑。

是否有正确的方法可以使用扫描仪从命令行捕获空白输入? (有人按一下就进入,或者按几次空格然后进入)

感谢您的建议

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

【问题讨论】:

  • 我也希望问这是否是从命令行读取用户输入的正确方法。例如,我应该处理什么常见的异常?感谢您的任何解释
  • 为了挑剔,这些代码都不会从命令行读取 - 你的参数在 main() 的 args 中。但你说的是标准输入。

标签: java user-input inputstream java.util.scanner


【解决方案1】:

Scanner 是用于输入的文件 I/O 的“傻瓜”实现。它允许教程和教科书的作者编写演示代码,而不必抱怨它的复杂性。

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

BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))

...然后你就可以了

String line = br.readLine()

只看到真相。

【讨论】:

  • 嗯,我有点不确定要采用哪种实现方式。在我上面链接的另一篇文章中,使用 BufferedReader(new InputStreamReader(System.in));
  • Well Scanner 在简单性方面更好。就细粒度控制而言,情况更糟。
【解决方案2】:

选择 = 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...

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多