2016-03-24 19 views
0

Bu hatayı almaya devam ediyorum. Nedeni metin belgesinde bulunan sekmelerden kaynaklanıyordu. Ama anlayamıyorum!java ile metin dosyasında okuma (Sekmelerle)

girdi dosyası:

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) 

İşte benim readFile sınıf için benim kodudur: Burada

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

benim hatadır! Bunu anlayamıyorum

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

Bu yöntemler nerede denir? –

+0

Örnek giriş dosyasının metnini gönderin. –

+0

"Bir Tarayıcı, varsayılan olarak beyaz boşluklarla eşleşen bir sınırlayıcı desen kullanarak girişini tokenlere ayırır". Bu sizin için sorun olabilir, açık whitespaces ile deneyin ** veya ** bu belgede çalışmasını sağlamak için sınırlayıcıyı '\ t 'olarak ayarlayın. Ayrıca, bir sonraki öğenin gerçekten var olduğunu bilmediğinizde tarayıcınızda x.next() işlevini 4 kez aramayı sevmiyorum; bu, beklenmedik bir durum olduğunda yalnızca istisnalar atmanızı veya verileri karıştırmanızı istemektir. giriş formatı (bir hasta için 4 elemanlı çizgiler ve 3 elemanın bulunduğu 1 satır vardır, şu anda bunun için bir kontrol yapmazsınız.) –

cevap

2

Tahminimce, dört kelimeden daha az veya çok bir satır var. Not. Eğer bu beş kelime

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

söylemek eğer öyleyse Scanner.next() bir kelimeyi okur. Bu olduğunda, dört kelimenin tam olarak bir katı olmayacak ve programlarınız olduğu gibi çökecektir.

Her seferinde bir satırı okumanızı ve bunun yerine yalnızca sekme karakterini kullanarak bölmenizi öneririm.

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

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

} 
İlgili konular