我无法理解下面的来源:
myChar1 = myScanner.findWithinHorizon(".",0).charAt(0);
System.out.println(myChar1);
myChar2 = myScanner.findWithinHorizon(".",0).charAt(0);
System.out.print(myChar2);
我理解它的作用,但我只是在理解它是如何工作时遇到了一些麻烦。
用户输入的实际提示是在第一行右边完成的吗?但第一行的真正含义是:“将输入的第一个字符放在myChar1中”。然后会发生什么?似乎输入仍然在myScanner
内,因为当我在myChar2
中使用它时,我得到了第二个字符,但为什么呢?为什么不是第一个char
? findWithinHorizon(".",0).charAt(0)
是否删除分配给变量的char?
最后一个问题:如果在第一行中程序提示用户输入,为什么不在第二行再次执行?
此外,快速回顾一下(“。”,0)也会有所帮助。
答案 0 :(得分:0)
也许您缺少的部分是findWithinHorizon
实际上将正则表达式作为String参数。在正则表达式中,.
匹配任何字符(新行除外)。
对findWithinHorizon(".", 0)
的调用只是找到输入中的下一个字符,并使扫描程序超过找到的内容。
例如,
Scanner in = new Scanner("abc123");
for(;;) {
String found = in.findWithinHorizon(".", 0);
if(found == null) break;
System.out.println(found);
}
输出是:
a b c 1 2 3
它不会在第二行提示输入的原因是Scanner和System.in一起工作的方式。如果没有更多的现有输入要消耗,它们将仅阻止并提示输入。举一个简短的例子,试试这个:
Scanner in = new Scanner(System.in);
while(true) {
System.out.println(in.findWithinHorizon(".", 0));
}
这将无限循环,重复你输入的任何内容,逐个字符。它只会在先前输入完成时提示更多。在第一次迭代中,Scanner将在System.in上调用read
,它将阻塞并等待输入。当输入用完时,read
将再次阻止。