检测word文件是否包含重复项

时间:2016-10-06 01:42:20

标签: java duplicates hashset

我正在尝试编写将读取文件并检测文件是否有重复的代码。

这是我目前的代码。它检测到重复但输出不是我想要的。我希望它只输出一次。

set<String> set = new Hashset<>();
ArrayList<String>list = new ArrayList<String>();
Scanner infile = new Scanner(new File args[0]));
while(infile.hasNext()){
     list.add(infile.next());
}
infile.close();


for(String word : list){
   if(set.add(word) == false){
       System.out.println("NOT UNIQUE");
   }else {
       System.out.println("UNIQUE");
   }
 }

对产出进行澄清。

我希望输出只是UNIQUENOT UNIQUE,具体取决于是否存在重复项。

2 个答案:

答案 0 :(得分:0)

如果您只想打印一次,则使用布尔变量存储结果,然后再打印。

e.g。

boolean isUnique = true;
for(String word : list){
    if(set.add(word) == false){
       isUnique = false;
       // can break;
       break
    }
 }

 System.out.println ("isUnique: " + isUnique);

答案 1 :(得分:0)

此处的另一个选择是使用HashMap而不是列表。如果遇到重复,您可以立即停止迭代文件:

Map<String, Boolean> map = new HashMap<>();
boolean isUnique = true;
Scanner infile = new Scanner(new File args[0]));
while (infile.hasNext()) {
    String next = infile.next();
    if (map.get(next) != null) {
        isUnique = false;
        break;
    }
    map.put(next, true);
}
if (isUnique) {
    System.out.println("UNIQUE");
}
else {
    System.out.println("NOT UNIQUE");
}
infile.close();