2016-03-24 11 views
0

このエラーが発生し続ける。テキスト文書に含まれているタブが原因であるかどうかはわかりませんでした。しかし、私はそれを把握することはできません!javaでテキストファイルを読む(タブ付き)

入力ファイル:

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:907) 
    at java.util.Scanner.next(Scanner.java:1416) 
    at readFile.readFile(readFile.java:26) 
    at Tree.main(Tree.java:64) 

ここに私のreadFileのクラスのための私のコードは次のとおりです。ここで

Baker, William,  Chavez,  04/01/05, 04/10/06 
    Sanchez, Jose,  Chavez,  06/15/05, 
    Anderson, Robert, Wong,  04/02/05, 03/30/06 

は私のエラーです!それを理解することができません

import java.io.*; 
import java.util.*; 


public class readFile { 
private Scanner x; 


public void openFile(){ 
    try{ 
    x = new Scanner(new File("patient.txt")); 
    } 
    catch (Exception e){ 
     System.out.println("Couldn't find file!"); 
    } 

} 

public void readFile(){ 

    Tree tree = new Tree(); 
    { 
     int key=0; 
     while(x.hasNext()){ 
      String patientName = x.next(); 
      String doctorName = x.next(); 
      String currentApp = x.next(); 
      String nextApp = x.next(); 
      tree.addNode(key++, patientName, doctorName, currentApp, nextApp); 
     } 
    } 




} 
public void closeFile(){ 
    x.close(); 
} 

} 
+0

これらのメソッドはどこにありますか? –

+0

サンプル入力ファイルのテキストを転記します。 –

+0

"スキャナは、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します。明白な空白で試してみてください**または**この文書のためにデリミタを '\ t'に設定してください。また、あなたのスキャナ上で 'x.next()'を4回呼び出すのは好きではありません。なぜなら、次の要素が実際に存在することを本当に知らない時は、予期せぬことが起こったときに例外を投げたり、 (1人の患者に4つの要素があり、3つの要素に1つの行がありますが、現在はその要素をチェックしていません) –

答えて

2

私の推測では、4語以下または4語未満の行があります。注意。あなたはこれが言葉です

one{tab}two three{tab}four{tab}five{newline} 

言ってきたので、もしScanner.nextは()の単語を読み込みます。これが起こると、4つの単語の正確な倍数はなくなり、あなたのプログラムはそれと同じようにクラッシュします。

私は一度に1行を読み、代わりにタブ文字を使って分割することをお勧めします。

while (x.hasNextLine()) { 
    String line = x.nextLine(); 
    if (line.trim().isEmpty()) continue; // skip blank lines. 

    String[] parts = line.split("\t", 4); 

} 
関連する問題