2016-04-14 21 views
0

Ich versuche, aus der Textdatei zu lesen und nur nicht wiederholte Zeilen mit Hilfe der Liste auszudrucken.Java liest aus Textdatei

File file = new File("E:/......Names.txt"); 
List<String> names = new ArrayList<String>(); 

Scanner scan = new Scanner(file); 
int j=1; 

while(scan.hasNextLine() && j!=100){ 
    if(!names.contains(scan.nextLine())) 
    names.add(scan.nextLine()); 

    System.out.println(names); 
    j++; 
} 
scan.close(); 

Antwort

3

Statt scan.nextLine() zweimal zu rufen, sollten Sie den Wert in einer Variablen speichern:

String name = scan.nextLine(); 
if (!names.contains(name)) { 
    names.add(name); 

    // ... 
} 

Andernfalls Sie einen anderen Wert bekommen jedes Mal, wenn scan.nextLine() rufen, so dass der Wert, den Sie überprüfen mit contains ist anders als die Sie add.

Allerdings ist es einfach leichter, eine Set<String> zu verwenden, die nicht zuzulassen, dass Duplikate garantiert:

Set<String> names = new LinkedHashSet<>(); 
// ... 
while (scan.hasNextLine() && names.size() < 100) { 
    if (names.add(scan.nextLine()) { 
    // Only runs if it wasn't there before. 
    } 
} 
1

Sie versuchen, mit der gleichen Linie zu beschäftigen, aber Sie behandeln unterschiedliche:

if(!names.contains(scan.nextLine())) //this reads a line 
    names.add(scan.nextLine()); //but this reads another line! 

Ändern Sie es tun:

while(scan.hasNextLine() && j!=100){ 
    String nextLine = scan.nextLine(); 
    if(!names.contains(nextLine)){ 
    names.add(nextLine); 
    } 
    //... 
Verwandte Themen