Java 从文本文件中删除重复行
我有一个按字母顺序排序的文本文件,大约有94000行名称(每行一个名称,仅文本,没有标点符号) 例如: 爱丽丝 鲍勃 西蒙 西蒙 汤姆 每行采用相同的形式,第一个字母大写,没有重音字母 我的代码:Java 从文本文件中删除重复行,java,text,data-manipulation,Java,Text,Data Manipulation,我有一个按字母顺序排序的文本文件,大约有94000行名称(每行一个名称,仅文本,没有标点符号) 例如: 爱丽丝 鲍勃 西蒙 西蒙 汤姆 每行采用相同的形式,第一个字母大写,没有重音字母 我的代码: try{ BufferedReader br = new BufferedReader(new FileReader("orderedNames.txt")); PrintWriter out = new PrintWriter(new BufferedWriter(n
try{
BufferedReader br = new BufferedReader(new FileReader("orderedNames.txt"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("sortedNoDuplicateNames.txt", true)));
ArrayList<String> textToTransfer = new ArrayList();
String previousLine = "";
String current = "";
//Load first line into previous line
previousLine = br.readLine();
//Add first line to the transfer list
textToTransfer.add(previousLine);
while((current = br.readLine()) != previousLine && current != null){
textToTransfer.add(current);
previousLine = current;
}
int index = 0;
for(int i=0; i<textToTransfer.size(); i++){
out.println(textToTransfer.get(i));
System.out.println(textToTransfer.get(i));
index ++;
}
System.out.println(index);
}catch(Exception e){
e.printStackTrace();
}
试试看{
BufferedReader br=新的BufferedReader(新文件阅读器(“orderedNames.txt”);
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter)(“sortedNoDuplicateNames.txt”,true));
ArrayList textToTransfer=新的ArrayList();
字符串previousLine=“”;
字符串current=“”;
//将第一行加载到前一行
previousLine=br.readLine();
//将第一行添加到传输列表
textToTransfer.add(上一行);
while((current=br.readLine())!=previousLine&¤t!=null){
textToTransfer.add(当前);
前一行=当前;
}
int指数=0;
对于(int i=0;i使用a而不是ArrayList)
Set<String> textToTransfer = new TreeSet<>();
Set textToTransfer=new TreeSet();
树集已排序,不允许重复。不要重新发明轮子
如果你不想要重复,你应该考虑使用<代码>集合<代码>,它不允许重复。删除重复元素最简单的方法是将内容添加到一个不允许重复的内容:
import java.util.*;
import java.util.stream.*;
public class RemoveDups {
public static void main(String[] args) {
Set<String> dist = Arrays.asList(args).stream().collect(Collectors.toSet());
}
}
与其他方法一样,我建议使用不允许重复输入集合的集合对象,但我认为我可以为您确定函数的错误Java中的While
循环不正确。=
(及其对应项)用于确定两个对象是否相同,这与确定它们的值是否相同不同。幸运的是,Java的String
类在equals()中有一个静态字符串比较方法
。您可能需要以下内容:
while(!(current=br.readLine()).equals(previousLine)和¤t!=null){
请记住,在此处中断的While
循环将迫使您停止文件读取,这可能不是您想要的。!(current=br.readLine()).equals(previousLine)
列表
听起来不是解决这个问题的正确数据结构。我认为您应该使用集合
的一些实现,因为它们不会像列表
那样存储重复项。最好仔细考虑数据结构的选择,而不是武断地确定数组列表
是最好的。
sort myFileWithDuplicates.txt | uniq -u > myFileWithoutDuplicates.txt