对于一个问题,我必须在列中找到唯一字符串的数量并将其写入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) {
}
}
}
答案 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...
}