2017-04-02 1 views
0

Ich habe Probleme zu verstehen, wie Java den Scanner benutzt, um Zeilen aus einer Datei zu lesen, und hoffte, nach Tagen der Verwirrung Klarheit zu bekommen.Lesen einer Datei mit dem Scanner

Ich habe eine TXT-Datei mit einer Zeile, die einen Namen enthält und dann 5 verdoppelt. Ich versuche herauszufinden, wie ich jedem dieser Variablen eine Variable innerhalb einer Schleife zuweisen kann, damit ich mit den Daten arbeiten kann. Mein Ziel ist es, die Daten aus diesen Zeilen tatsächlich zu übernehmen und sie als Parameter an eine andere Validierungsmethode zu übergeben. Wenn es einen einfacheren Weg dafür gibt, bin ich ganz Ohr. Ich habe das Gefühl, dass ich keinen Weg finden kann, über jedes Ding innerhalb der nextLine, nur über die gesamte Linie hinweg, zu iterieren. Ich versuche, dies zu tun, ohne ein Array zu verwenden, hier ist das relevante Code-Snippet, das ich gerade habe.

Scanner inputFile = new Scanner(file); 

while (inputFile.hasNext()) 
    { 
     String line = ""; 
     accumulator++; 
     Scanner split = new Scanner(inputFile.nextLine()); 

     while (split.hasNext()) 
     { 

     } 



     stockName = inputFile.next(); 
     shares = inputFile.nextDouble(); 
     purchasePrice = inputFile.nextDouble(); 
     purchaseCommission = inputFile.nextDouble(); 
     salesPrice = inputFile.nextDouble(); 
     salesCommission = inputFile.nextDouble(); 

     System.out.println(stockName); 
     System.out.println(shares); 
     System.out.println(purchasePrice); 
     System.out.println(purchaseCommission); 
     System.out.println(salesPrice); 
     System.out.println(salesCommission); 


     System.out.print(line); 
     System.out.println(""); 
     // checkValidity(line); 
    } 

Ich bin eine harte Zeit, zu fragen und zu artikulieren, was ich nicht weiß, so dass jeder und alle Hilfe wird sehr geschätzt ... Ich habe auf diesem buchstäblich für drei Tage zu arbeiten und ich bin an einer Gesamtwand.

EDIT:

Das Layout der Textdatei sieht wie folgt aus

DELL: Dell Inc 
125 25.567 0.025 28.735 0.025 
MSFT: Microsoft 
34.1 -15.75 0.012 15.90 0.013 

Antwort

1

Sie sind fast da. Sie müssen nur die Zeile entfernen:

while (split.hasNext()) 
{ 

} 

Dies verbraucht alle Elemente zu teilen. Sie müssen diese Elemente, um alle wie stock zuweisen, salesPrice usw.

So, das neue Snippet innerhalb des äußeren while-Schleife

ist
stockName = inputFile.nextLine(); 
    Scanner split = new Scanner(inputFile.nextLine());   

    shares = split.nextDouble(); 
    purchasePrice = split.nextDouble(); 
    purchaseCommission = split.nextDouble(); 
    salesPrice = split.nextDouble(); 
    salesCommission = split.nextDouble(); 

Da Sie Zeile für Zeile lesen, auch sicherstellen, dass die äußere while-Schleife sieht wie folgt aus:

+0

Die Datei ist tatsächlich so ausgelegt, dass der Name in einer Zeile ist und die nächste Zeile alle Daten, die ich brauche. Ich habe versucht, stockName zu split.nextLine() zu wechseln, aber dann wirft es einen Fehler über die nächste Zeile (shares) für NoSuchElementException. Irgendeine Idee warum? Sollte stockName nicht einfach die gesamte Zeile verbrauchen und dann automatisch zur nächsten Zeile wechseln? – Josh

+0

@Josh nach deinem Kommentar bearbeitet – bsd