2017-06-11 35 views
-5

我是新來的JAVA,我試圖從.txt文件讀取數據。我在'Scanner in=new Scanner("file.txt");'中實現了一個掃描器對象,然後沿着代碼循環遍歷文件的內容。文件中有多行數據,每行都有三個字符串(安全編號,First名字,姓氏:01 Thomas Anderson)hasNext()在做什麼?

while(in.hasNext()){ 
    String ss = in.next(); 
    String FName=in.next(); 
    String LName=in.next(); 

    System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n",ss,FName,LName); 
    } 

那麼,什麼是hasNext()方法呢?它是否查找行的末尾或文件中的最後一行還是....?

請上面的代碼中的工作闡述(提next()方法太)

:)

+2

你讀過的API Javadoc中的'Scanner.hasNext()'方法的文檔?因爲如果你不這樣做,而且看到一種方法的第一反應就是在這裏問它是什麼意思,那麼你將需要很多問題......如果有,請更具體地說明你不瞭解的內容。 – SJuan76

+0

你看過javadoc嗎?有沒有什麼部分我們不清楚 –

回答

0

我建議在看的Javadoc,但我會解釋給你簡單如我所能。

基本上,如果給定的文檔包含另一個字符串,則hasNext()方法返回true。因此,如果所述文件具有另一個字符串,爲什麼該片段將循環。一旦整個文檔中沒有更多的字符串,hasNext()返回false

下面是next()方法的示例: String myString = myScanner.next(); 這使得myString等於給定文檔中的下一個字符串。

0

的Javadoc說:

hasNext
公共布爾hasNext()

返回true,如果此掃描器的輸入中有另一個標記。此方法可能會在等待輸入掃描時阻塞。掃描儀不會通過任何輸入前進 。

下一個
公共字符串的next()

查找並返回來自此掃描器的下一個完整標記。 A 完整令牌的前後是與 定界符模式匹配的輸入。即使先前調用hasNext()返回true,此方法也可能在等待輸入爲 掃描時阻塞。

要讀取所有文件行,您必須檢查每行是否有標記。然後調用3次下一個方法,因爲你知道會有每行3個令牌:

import java.io.File; 
import java.util.Scanner; 

public class FLoader { 

    public void load(String path) { 
     Scanner in = null; 

     try { 
      in = new Scanner(new File(path)); 
      while (in.hasNext()) { 
       String ss = in.next(); 
       String FName = in.next(); 
       String LName = in.next(); 

       System.out.printf("SSN: %s, FirstName: %s, LastName: %s \n", ss, FName, LName); 
      } 

     } catch (Exception e) { 
      System.err.println("Loading file failed"); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
}