java - 从文本文件中删除重复行

标签 java text data-manipulation

我有一个按字母顺序排序的文本文件,包含大约 94,000 行名称(每行一个名称,纯文本,没有标点符号。

例子:

爱丽丝

鲍勃

西蒙

西蒙

汤姆

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

我的代码:

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();
}

据我了解,文件的第一行正在被读取并加载到 previousLine 变量中,就像我想要的那样,current 被设置为我们正在读取的文件的第二行,然后比较 current针对上一行和 null,如果它与最后一行不同并且不为 null,我们将其添加到数组列表中。

然后将 previousLine 设置为当前值,以便当前的下一个 readLine 可以替换当前的“当前”值以继续在 while 循环中进行比较。

我看不出这有什么问题。 如果找到重复项,循环肯定会中断吗?

如果结果是愚蠢的事情,请提前道歉。

最佳答案

使用 TreeSet而不是 ArrayList。

Set<String> textToTransfer = new TreeSet<>();

TreeSet 是有序的,不允许重复。

关于java - 从文本文件中删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45823487/

相关文章:

java - ANTLR忽略oracle脚本中的 "/"

JAVA:我无法从套接字读取文本,由 C++ 程序发送

java - 在标记文件 JSP 中传递变量

java - .getInputStream() 出现问题

Linux SED - 保留空间 - 所有行的一个值

r - dplyr 的过滤函数 : how to return every value (or «cancel» the effect of filter)?

python - TypeError 'DataFrame'对象不可调用

c - 我需要一个工具来在单个文本文件或一组文本文件中查找重复或相似的文本 block

python - 将整数写入文本文件

使用多个变量和一些时间不变的从宽到面板 reshape 数据框