findWithinHorizo​​n("。",0).charAt(0)澄清

时间:2014-03-22 16:51:59

标签: java

我无法理解下面的来源:

myChar1 =  myScanner.findWithinHorizon(".",0).charAt(0);
System.out.println(myChar1);
myChar2 =  myScanner.findWithinHorizon(".",0).charAt(0);
System.out.print(myChar2);

我理解它的作用,但我只是在理解它是如何工作时遇到了一些麻烦。 用户输入的实际提示是在第一行右边完成的吗?但第一行的真正含义是:“将输入的第一个字符放在myChar1中”。然后会发生什么?似乎输入仍然在myScanner内,因为当我在myChar2中使用它时,我得到了第二个字符,但为什么呢?为什么不是第一个charfindWithinHorizon(".",0).charAt(0)是否删除分配给变量的char? 最后一个问题:如果在第一行中程序提示用户输入,为什么不在第二行再次执行? 此外,快速回顾一下(“。”,0)也会有所帮助。

1 个答案:

答案 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将再次阻止。