关于Java Scanner类hasNext()方法工作机制的疑问
Scanner的hasNext()输入单个token后返回true的原因
你的代码示例:
Scanner keyboard = new Scanner(System.in); System.out.println(keyboard.hasNext());
问题解析
- hasNext()是阻塞式方法,且标准输入流
System.in默认不会自动终止。当你输入"test"并回车时,Scanner确实解析出了第一个token,但此时输入流并没有关闭,hasNext()会持续等待是否有新的输入内容,因此返回true。 - Scanner默认以空白字符(回车、空格、制表符等)作为分隔符,回车只是用来分隔token的标记,不是输入结束的信号。只有当你手动发送EOF(文件结束)信号(Unix/macOS用Ctrl+D,Windows用Ctrl+Z),输入流才会终止,此时hasNext()才会返回false。
- 你觉得输入单个内容后应该没有下一个token,是混淆了"当前已输入的内容是否有下一个token"和"输入流是否还会有新的token"。hasNext()判断的是后者——只要输入流未关闭,它就会一直等待新输入,不会因为当前已解析完所有现有token就返回false。
内容的提问来源于stack exchange,提问作者Kon
相关产品推荐
相关产品推荐

