为了账号安全,请及时绑定邮箱和手机立即绑定

Java Scanner useDelimiter 意外结果

Java Scanner useDelimiter 意外结果

肥皂起泡泡 2022-10-20 15:11:46
当我们将字符串传递给扫描仪时,我们得到 '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”。控制台期望输入另一个 / 以输出相同的值。为什么它们的工作方式不同?
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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


如果您输入a///b Enter,您仍然可以输入另一个分隔符/,最终让您Scanner知道令牌已完成。如果您输入foo/,则下一个标记是"b\nfoo",说明Scanner知道这b只是下一个标记的开始,直到另一个标记/到达流中才完成。


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


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

"a"      <- output

""       <- output

""       <- output

foo/     <- input

"b       <- output

foo"     <- output


查看完整回答
反对 回复 2022-10-20
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信