gpt4 book ai didi

Java Scanner useDelimiter 意外结果

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:27 25 4
gpt4 key购买 nike

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

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

最佳答案

String 上的 Scanner 在读取 'b' 字符时已到达其输入的末尾。但是当你在 System.in 上使用 Scanner 时,流还没有结束;您仍然可以在换行符后输入更多内容。

如果您输入 a///b Enter,您仍然可以输入另一个定界符 / 最终让 Scanner 知道token完成了。如果您输入 foo/,那么下一个标记是 "b\nfoo",说明 Scanner 知道 b 只是下一个标记的开始,直到另一个 / 到达流中才结束。

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

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

关于Java Scanner useDelimiter 意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55834369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com