關於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,說是檢測文件尾,實際理解就是
是否讀取到的數據爲空,因爲其不會讀入文件尾,當遇到文件尾自然沒有字符爲空。饒了一圈感覺又繞回來了,還是
檢測是否有沒有下一個元素問題,但是在探索過程中對其理解更加深刻了,^_^
第一次寫這些東西,感覺對理解真的很有幫助,有問題歡迎指正!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章