hasNext() hasNextLine() next() nextLine() 详解

hasNext()

  • 当缓冲区为空时,该方法会阻塞,进入等待状态

  • 当缓冲区不为空时,该方法默认返回True,

  • 键盘输入,以回车为结束标志符,全空格或者直接空行回车不会导致hasnext()停止阻塞

    之后按行写入缓冲区

  • 如果传入了pattern,即hasnext(pattern),则如果单次读入的缓冲区内容与pattern匹配,返回true,否则返回false

    • 含有pattern的hasNext()执行流程:

      1. 缓冲区为空,则阻塞等待

      2. 检测到有效输入,判定是否为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博客

  1. 如果是hasNext()的话,可以添加pattern
  2. 循环内添加break,自己编写代码判定
  3. cmd窗口运行可以ctrl+c或者ctrl+z,IDEA下用ctrl+d
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值