【问题标题】:Detecting whether or not a word file contains a duplicate检测word文件是否包含重复项
【发布时间】:2017-02-14 14:54:39
【问题描述】:

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

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

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 基于是否存在重复。

【问题讨论】:

  • “输出不是我想要的。但是我希望它只输出一次。”请解释更多。

标签: java duplicates hashset


【解决方案1】:

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

例如

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

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

【讨论】:

    【解决方案2】:

    这里的另一个选项是使用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();
    

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多