代码之家  ›  专栏  ›  技术社区  ›  user6911980

从文本文件中删除重复行

  •  3
  • user6911980  · 技术社区  · 7 年前

    我有一个按字母顺序排序的文本文件,大约有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();
    }
    

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

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

    我看不出这有什么不对。

    当事情变得愚蠢时,请提前道歉。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Juan Carlos Mendoza    7 年前

    使用 TreeSet 而不是ArrayList。

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

        2
  •  2
  •   1ac0 Kamlesh Patidar    7 年前

    如果你不想要复制品,你应该考虑使用 Collection 这不允许重复。删除重复元素的最简单方法是将内容添加到 Set 不允许重复:

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

    sort myFileWithDuplicates.txt | uniq -u > myFileWithoutDuplicates.txt
    
        3
  •  1
  •   MasterChef    7 年前

    虽然与其他人一样,我建议使用不允许重复输入集合的集合对象,但我认为我可以为您确定函数的错误。您试图比较字符串的方法(当然,这是您试图在 While 循环在Java中不正确。这个 == String 类在中具有静态字符串比较方法 equals()

    while(!(current = br.readLine()).equals(previousLine) && current != null){

    记住,打破你的 虽然