Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描程序useDelimiter意外结果_Java_Java.util.scanner_Delimiter - Fatal编程技术网

Java扫描程序useDelimiter意外结果

Java扫描程序useDelimiter意外结果,java,java.util.scanner,delimiter,Java,Java.util.scanner,Delimiter,当我们像这样将字符串传递给扫描仪时,会得到“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());

当我们像这样将字符串传递给扫描仪时,会得到“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”。 控制台希望输入另一个/以输出相同的值


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

当读取
'b'
字符时,
字符串上的
扫描器已到达其输入的末尾。但是,当您在
系统上使用
扫描仪时,流尚未结束;您仍然可以在换行符后键入更多输入

如果您键入
a///b
Enter,您仍然可以键入另一个分隔符
///code>,这将最终让
扫描仪
知道令牌已完成。如果键入
foo/
,则下一个令牌是
“b\nfoo”
,说明
扫描器
知道
b
只是下一个令牌的开始,在另一个
/
到达流之前,下一个令牌不会完成

在这里,我在所有输出周围放置了双引号,以显示找到的每个标记,即使是空的

a///b    <- input; token starting with "b" is unfinished
"a"      <- output
""       <- output
""       <- output
foo/     <- input
"b       <- output
foo"     <- output

a///b我意识到我还可以添加EOF(windows上的Control+Z或mac上的Control+D)来完成输入。谢谢