文章目录
hasNext()
-
当缓冲区为空时,该方法会阻塞,进入等待状态
-
当缓冲区不为空时,该方法默认返回True,
-
键盘输入,以回车为结束标志符,全空格或者直接空行回车不会导致hasnext()停止阻塞
之后按行写入缓冲区
-
如果传入了pattern,即hasnext(pattern),则如果单次读入的缓冲区内容与pattern匹配,返回true,否则返回false
-
含有pattern的hasNext()执行流程:
-
缓冲区为空,则阻塞等待
-
检测到有效输入,判定是否为pattern,是则返回true,否则返回false
-
-
pattern的匹配方式:
-
从第一个不为空格的字符开始,到结束或者下一个空格为止的字符串与pattern是否相等
-
测试结果: pattern = "exit" 输入 是否匹配 “ exit ” 是 “ 1 exit” 否 “ exit 1 ” 是
-
判定方式与之后使用next或者nextLine读取缓冲区数据无关
-
-
hasNextLine()
-
当缓冲区为空时,该方法会阻塞,进入等待状态
-
当缓冲区不为空时,该方法默认返回True,不支持pattern参数
-
键盘输入,以回车符为结束标志,空格或者直接空行回车都被视为有效输入,会导致hasNextLine()停止阻塞
一次写入缓冲区一行
hasNext与hasNextLine的区别
-
有效输入判定不同:空行或则全空格行不会被hasNext视为有效输入,但hasNextLine会
ps: 有效输入的前置空格会被hasNext写入缓冲区
while(in.hasNext()){ String s = in.nextLine(); System.out.println(s); } 输入: 11 输出: 11
-
参数不同,hasNext()支持pattern
next()
-
从缓冲区读入数据,忽略前置空格,遇到空格停止一次读取
while(in.hasNext()){ //System.out.println("b= "+ b); System.out.println(++i); String s = in.next(); System.out.println(s); } 请输入: 11 11 1 11 2 11
nextLine()
- 从缓冲区读入数据,一次读入一行数据
总结:
- hasNext与hasNextLine决定输入是否有效的判定方式
- next与nextLine决定从缓冲区读取数据的方式,前者是以空格为间隔,后者是按行读取
扩展-怎么跳出while(in.hasNext())或者while(in.hasNextLine())循环:
参考:(10条消息) Java Scanner的hasNext()方法_java hasnext()_realzhangsan的博客-CSDN博客
- 如果是hasNext()的话,可以添加pattern
- 循环内添加break,自己编写代码判定
- cmd窗口运行可以ctrl+c或者ctrl+z,IDEA下用ctrl+d