Java Scanner useDelimiter 意外结果

当我们将字符串传递给扫描仪时,我们得到 'ab' 作为控制台输出,如下所示:


 public static void main(String []args){

    Scanner sc = new Scanner("a///b");

    sc.useDelimiter("/");


    System.out.print(sc.next());    

    System.out.print(sc.next());    

    System.out.print(sc.next());    

    System.out.print(sc.next());    

    sc.close();

 }

但是如果我们将扫描线更改为


Scanner sc = new Scanner(System.in);

并传入相同的字符串a///b


控制台仅输出“a”。控制台期望输入另一个 / 以输出相同的值。


为什么它们的工作方式不同?


肥皂起泡泡
浏览 88回答 1
1回答

智慧大石

读取字符时,aScanner上的AString已到达其输入的末尾。'b'但是当你使用ScanneronSystem.in时,流还没有结束;您仍然可以在换行符后输入更多输入。如果您输入a///b Enter,您仍然可以输入另一个分隔符/,最终让您Scanner知道令牌已完成。如果您输入foo/,则下一个标记是"b\nfoo",说明Scanner知道这b只是下一个标记的开始,直到另一个标记/到达流中才完成。在这里,我在所有输出周围放置了双引号,以显示找到的每个标记,即使是空的。a///b&nbsp; &nbsp; <- input; token starting with "b" is unfinished"a"&nbsp; &nbsp; &nbsp; <- output""&nbsp; &nbsp; &nbsp; &nbsp;<- output""&nbsp; &nbsp; &nbsp; &nbsp;<- outputfoo/&nbsp; &nbsp; &nbsp;<- input"b&nbsp; &nbsp; &nbsp; &nbsp;<- outputfoo"&nbsp; &nbsp; &nbsp;<- output
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java