Java 从文本文件中删除重复行

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

我有一个按字母顺序排序的文本文件,大约有94000行名称(每行一个名称,仅文本,没有标点符号)

例如:

爱丽丝

鲍勃

西蒙

西蒙

汤姆

每行采用相同的形式,第一个字母大写,没有重音字母

我的代码:

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