2016-05-03 8 views
0

Für eine Frage muss ich die Anzahl der eindeutigen Strings in einer Spalte finden und in eine CSV-Datei schreiben.Arraylist mit Daten aus CSV-Datei ist voll von Nullwerten?

Mein Plan war, das erste String innerhalb einer Arraylist und Schleife durch die Säule zu setzen und alle Saiten hinzufügen nicht innerhalb der Arraylist

Es funktioniert mit jeder gewöhnlichen Arraylist, aber aus irgendeinem Grunde der Arraylist aus der CSV-Datei mit Daten ist alles Null

Kann mir jemand erklären, warum das ist und wie ich es beheben kann? Mein Code ist unten.

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashSet; 

public class uniqueTrips { 
static ArrayList<String> removeDuplicates(ArrayList<String> list) { 

    ArrayList<String> result = new ArrayList<>(); 

    HashSet<String> set = new HashSet<>(); 

    for (String item : list) { 

     if (!set.contains(item)) { 
      result.add(item); 
      set.add(item); 
     } 
    } 
    return result; 
} 

public static void main(String[] args) throws IOException { 

    ArrayList<String> trips = new ArrayList<String>(); 
    try { 
     BufferedReader reader = new BufferedReader(new FileReader("Passenger_Weather_Combined.csv")); 
     BufferedWriter writer = new BufferedWriter(new FileWriter("result.csv")); 
     double[] attribute = new double[15]; 
     double[][] attributes = new double[77284][15]; 
     String[][] attributes2 = new String[77284][15]; 
     String line = reader.readLine(); 
     int number = 0; // Rows! 

     trips.add(attributes2[1][9]); 

     while (line != null) { 
      String[] att = line.split(","); 
      attributes[number] = attribute; 
      line = reader.readLine(); 
     } 
     System.out.println(removeDuplicates(trips).size()); 

     writer.newLine(); 
     number++; 

     writer.close(); 
     reader.close(); 
    } catch (IOException e) { 

    } 

} 

}

+0

Haben Sie vor, die Zeile 'trips.add (attributes2 [1] [9])' dort zu verlassen? Das einzige Mal, dass du etwas zu "trips" hinzufügst, ist in dieser Zeile und 'attributes2' enthält an dieser Stelle nichts. Tatsächlich scheint 'attributes2' nie etwas darin gespeichert zu haben. –

Antwort

1

Dieses Bit ist hier, wo Sie durch die Zeilen der Datei iterieren.

while (line != null) { 
    String[] att = line.split(","); 
    attributes[number] = attribute; 
    line = reader.readLine(); 
} 

Sie sind jedoch tatsächlich nicht die Daten, die Sie in lesen zu berühren lesen Sie die Zeile in Zeile, teilen Sie die Zeile in Spalten und speichern Sie sie in att. Dann verwenden Sie nie mehr den Wert in att - stattdessen verwenden Sie die Variable Attribut, die keine sinnvollen Daten enthält. Versuchen Sie, die Schleife zu ändern:

+0

Ich erhalte eine NumberFormatException, weil einige Daten nicht doppelt analysiert werden können. Ausnahme im Thread "main" java.lang.NumberFormatException: Für Eingabezeichenfolge: "4/7/2009" \t bei sun.misc.FloatingDecimal.readJavaFormatString (Unbekannte Quelle) \t bei java.lang.Double.parseDouble (Unbekannte Quelle) \t bei Messin.main (Messin.java:47) –

+0

Dann 'Attribute' sollte kein Doppel-Array sein ... Sie können es leicht zu einem String-Array ändern, und entfernen Sie die Parsing-Logik. –

+0

Vielen Dank, ich schätze es sehr, dass Sie sich die Zeit genommen haben, mir zu helfen. Ich kann nicht glauben, dass ich etwas so einfaches nicht bemerken konnte! –

Verwandte Themen