Java扫描程序useDelimiter意外结果
当我们像这样将字符串传递给扫描仪时,会得到“ab”作为控制台输出: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());
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)来完成输入。谢谢