包含CSV文件数据的Arraylist是否为空值?

时间:2016-05-03 22:20:48

标签: java csv arraylist null

对于一个问题,我必须在列中找到唯一字符串的数量并将其写入CSV文件。

我的计划是将第一个String放在Arraylist中并循环遍历列并添加不在Arraylist中的任何字符串

它适用于任何普通的Arraylist但由于某种原因,包含CSV文件数据的Arraylist全部为空

任何人都可以向我解释为什么会这样,以及我如何解决它?我的代码如下。

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) {

    }

}

}

1 个答案:

答案 0 :(得分:1)

这里的这一位是遍历文件行的地方:

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

但是,实际上并没有触及您读入的数据。您将行读入,将行拆分为列,并将其保存在 att 中。然后,您从不使用 att 中的值 - 而是使用变量 attribute ,它不包含任何有意义的数据。尝试将循环更改为:

while (line != null) {
    String[] att = line.split(",");

    attributes[number] = new double[att.length];
    for (int i = 0; i < att.length; i++)
        attributes[number][i] = Double.parseDouble(att[i]);

    line = reader.readLine();
    number++; // Very important, otherwise you're always updating the same row...
}