关于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,说是检测文件尾,实际理解就是
是否读取到的数据为空,因为其不会读入文件尾,当遇到文件尾自然没有字符为空。饶了一圈感觉又绕回来了,还是
检测是否有没有下一个元素问题,但是在探索过程中对其理解更加深刻了,^_^
第一次写这些东西,感觉对理解真的很有帮助,有问题欢迎指正!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章