2017-02-28 4 views
0

Ich habe eine Datendatei in eine ArrayList importiert. Mein Problem ist, dass, obwohl es alle Namen in der Datei ausgibt, es mir nicht die richtige Größe geben wird. Stattdessen wird nur 1 ausgedruckt.Warum funktioniert .size() nicht ordnungsgemäß auf dieser ArrayList?

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

public class TestArray { 
    public static void main (String [] args){ 
    String filePath = "C:\\Users\\Admin\\workspace\\Fund III\\src\\names.dat"; 

    Scanner sc = null; 
    try { 

     sc = new Scanner(new File (filePath)); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    //Makes Array list 
    ArrayList<String> nameList = new ArrayList<String>(); 

    //Dumps names into array 
try{ 
    while(sc.hasNextLine()) 
    { 
     nameList.add(sc.nextLine()); 
    } 
    } 
    catch(Exception e) 
    { 
     System.out.println("Error: " + e); 
    } 
    System.out.println(nameList.size()); 
    System.out.println(nameList); 
} 
} 
+4

Wer hat gesagt, dass 1 nicht die richtige Größe hat? Vielleicht hat die Liste nur * eine * Sache darin. – Makoto

+2

Wie ist Ihre Datei strukturiert? Sind alle Namen in einer Zeile? –

+1

Wenn Sie eine Linux-Datei in einen Java-Prozess laden, der unter Windows läuft (oder umgekehrt), erkennt der Scanner die "Zeilenumbrüche" möglicherweise nicht korrekt und behandelt den Inhalt als einzelne Zeile. – Brad

Antwort

0

Es scheint, dass Ihre Datei nur eine Zeile hat. Hier ist, wie zu überprüfen:

while(sc.hasNextLine()) { 
    String line = sc.nextLine(); 
    nameList.add(line); 
    System.out.println("Line: '"+line+"'"); 
} 

Führen Sie Ihr geändertes Programm, und achten Sie auf einfache Anführungszeichen um die Saiten. Wenn Ihre Ausgabe mehrere Zeilen innerhalb eines einzelnen Anführungszeichenpaars erzeugt, besteht das Problem, dass Ihre Eingabe keine Zeilenendenmarkierungen enthält, die von dem System erwartet werden, auf dem Sie Ihr Programm ausführen.

+0

Es wird nur in einer Zeile gedruckt. Es gibt eine Liste mit Namen, und alle sehen so aus "JOAN". Gibt es eine Möglichkeit, sie zu trennen, so dass sie verschiedene Elemente sind? –

+0

@ JonathanOrtiz Verwenden Sie 'hasNext()'/'next()' anstelle von 'hasNextLine()'/'nextLine()'. – dasblinkenlight

0

Nach Scanner java doc ...

Der Standard Leerzeichen Trennzeichen von einem Scanner verwendet wird, wie durch Character.isWhitespace anerkannt.

Sind Sie sicher, dass Sie den Inhalt der Datei verstehen und wissen, wie sie erstellt wurde (Linux/Windows).

Wenn ich beispielsweise einen Java-Prozess unter Linux ausführe und eine Datei lese, die unter Windows erstellt wurde, muss ich oft den Befehl dos2unix verwenden, um das Dateiformat zu korrigieren. Andernfalls wird es nicht wie erwartet verarbeitet, es sei denn, Sie legen extra bemühen Sie sich, die korrekte Dateicodierung in Ihrem Java-Code anzugeben.

Verwandte Themen