我有一项任务,我必须阅读包含一些重复行数据的CSV文件。如何删除重复值并仅打印Eclipse中的唯一值
数据类似于: -
1,Ron,1234,ABC,12
2,Harry,4125,DEF,14
3,Kent,1786,GHI,15
1,Ron,1234,ABC,12
2,Harry,4125,DEF,14
答案 0 :(得分:2)
String csvFile = "csv.csv";
BufferedReader br = null;
String line = "";
HashSet<String> lines = new HashSet<>();
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
if (lines.add(line)) {
System.out.println(line);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
它可能对你有帮助
答案 1 :(得分:0)
我的建议是使用以下策略:
第1步:创建HashMap http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html 您将在哪里保存您阅读的CSV的每一行。您将保存在哈希映射中,因为Hashmap不会接受与另一个键相同的键。因此,您将读取的每一行,您将作为KEY保存在hashmap中! 因此,逻辑是:尝试将刚刚读取的行保存为键。如果它工作,打印该行。如果它不起作用,丢弃该行并阅读下一行。
得到它了?
第二步: 使用BufferedReader http://docs.oracle.com/javase/7/docs/api/index.html?java/io/BufferedReader.html逐行读取CSV。 使用带有readLine()的BufferedReader获取CSV的每一行。 它将以字符串
保存您正在读取的行那就是它。
所以,这里是整个代码的概述:
1-使用BufferedReader.readLine()
读取代码的每一行 2-从readLine获取该字符串并尝试将其添加到Hashmap作为hashmap的Key:如果有效,则打印String。如果它不起作用,丢弃该字符串;
3-阅读下一行。