我正在使用scanner类从命令行捕获用户输入(仅限字符串),以替代我以前的question。
以下似乎工作正常,除了空白行没有被第二个条件捕获。例如,当我按Enter键时,应将其捕获为空行,第二个条件应为true。但是,每次在控制台上都会显示一个新的空行,如果我继续按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();
}
}
答案 0 :(得分:1)
Scanner
是用于输入的文件I / O的“for dummies”实现。它允许教程和教科书编写者编写演示代码而不必担心它的复杂性。
如果你真的想知道你在读什么,你必须说出像
这样的内容BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))
...然后你可以做
String line = br.readLine()
除了事实之外别无其他。
答案 1 :(得分:0)
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...