Идентификация дубликатов номеров в текстовом файле с использованием хэш-набора - PullRequest
2 голосов
/ 07 января 2012

Здесь я написал код, который показывает повторяющиеся числа в текстовом файле. Здесь я предположил, что текстовый файл содержит только целые числа в каждой строке. Как вы можете видеть, он показывает повторяющиеся целые числа в текстовом файле.

Я жестко запрограммировал имя пути текстового файла.

Здесь я использовал два Hash Set для его реализации. Могу ли я сделать это, используя только один хэш-набор? Можете ли вы сказать мне, как реализовать то же самое, используя только один хэш-набор?

import java.io.*;
import java.util.*;

открытый класс FileRead {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    HashSet <String> uniquelines=new HashSet<String>();
    HashSet<String>duplicatelines=new HashSet<String>();


    try{
        FileInputStream fstream=new FileInputStream("C:/Users/LENOVO/Desktop/txt.txt");
        DataInputStream in=new DataInputStream(fstream);
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        ArrayList arr=new ArrayList();
        String str;
        while((str=br.readLine())!=null){
            if(uniquelines.contains(str)){
                if(!duplicatelines.contains(str)){
                    duplicatelines.add(str);
                    System.out.println(str);
                }
            }
            else{
                uniquelines.add(str);
            }
        }
        in.close();
    }catch(Exception e){
        System.out.println(e);
    }

}

}

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Чтобы сохранить существующую функциональность, я не понимаю, как вы могли бы использовать один HashSet.Однако вы можете использовать одну HashMap, где ключом будут строки, а значением будет число вхождений строки в файле.

Примечания:

  • потоки, программы чтения и записи всегда должны быть закрыты в блоке finally.
  • ваша переменная arr не нужна.
1 голос
/ 07 января 2012

Вам не нужно проверять, содержит ли uniquelines строку, просто добавьте ее в любом случае ... хешсет сам проверит и не допустит дублирования.См. Код ниже ...

Если вам не нужно печатать дубликаты несколько раз, а не только один раз (может быть, вы печатаете его только для тестирования?), Вам не нужно устанавливать дубликатыв приведенном ниже коде .... но если вы это сделаете, то вы не сможете сделать это, не отследив, какие дубликаты вы нашли ранее, поэтому да, вам понадобятся два набора ...

    public static void main(String[] args) {
    HashSet <String> uniquelines=new HashSet<String>();
    Set <String> duplicates=new HashSet<String>();
    BufferedReader br = null;
    try{
        FileInputStream fstream=new FileInputStream("C:/Users/LENOVO/Desktop/txt.txt");
        DataInputStream in=new DataInputStream(fstream);
        br=new BufferedReader(new InputStreamReader(in));
        String str;
        while((str=br.readLine())!=null){
            boolean duplicate = !uniquelines.add(str);
            if (duplicate) {
                if (!duplicates.contains(str)) {
                    System.out.println(str);
                    duplicates.add(str);
                }
            }
        }
    } catch(Exception e) {
        System.out.println(e);
    } finally {
        try {
            br.close();
        } catch(Exception e2) { }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...