关于java中hasNext的探索中的一点想法

关于input.hasNext()翻看网上资料一直以为其是检测缓冲区有没下一个元素,
但在实际运行中给了一段测试,
while(input.hasNext()){
    System.out.println("Hello world!");

}
System.out.println("Hello");
但在程序运行过程当中while循环一直都在执行当中,于是我蒙了,这个下一个
在此处到底指的是什么,是当我输入数据后的下一个,还是我未输入前的下一个
,根据程序运行结果来看,显然是当程序执行input.hasNext()时其等待一个输入
唯有输入后它才会检测,换言之,它不是检测下一个元素是否存在的吗,缓冲区当中
没有元素为何不执行false?它的本质到底是检测什么?突然觉得好好奇于是抱着一种
尝试的心态尝试下各种可能。于是,我想我该怎样做才能使其返回值为false呢?
感觉要看这个问题,还是要写点东西测试下,
import java.io.File;
import java.util.Scanner;
public class TestStringFormat {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String filename="lft.txt";
          Scanner scanner=null;
          try{
          scanner=new Scanner(new File(filename));
          System.out.println(scanner.hasNext());
          }catch(Exception e){
              e.printStackTrace();
        }
    }
}
当文件为空时,其输出为false,不为空为true。不过为什么在缓冲区就不是这样的
呢,因为CTRL+Z就是EOF的意思,所以将上面程序改为Scanner(System.in)在windows命令行下直接按下CTRL+Z提交,居然是
false,所以当程序运行时缓冲区还没有提交所以hasNext也就没有开始检测,当在缓冲区输入内容后提交其检测因为有内容当然
是true,而直接给CTRL+Z其检测到文件尾没有数据自然为false。
于是大胆推测has.Next实际是用来检测文件结尾的,在检测到文件尾就表示没有数据,针对缓冲区也是如此,可以将缓冲区看成一个
没有文件尾的文件,当为其加上文件尾时,就可以令hasNext输出false,说是检测文件尾,实际理解就是
是否读取到的数据为空,因为其不会读入文件尾,当遇到文件尾自然没有字符为空。饶了一圈感觉又绕回来了,还是
检测是否有没有下一个元素问题,但是在探索过程中对其理解更加深刻了,^_^
第一次写这些东西,感觉对理解真的很有帮助,有问题欢迎指正!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值