我正在尝试编写将读取文件并检测文件是否有重复的代码。
这是我目前的代码。它检测到重复但输出不是我想要的。我希望它只输出一次。
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");
}
}
对产出进行澄清。
我希望输出只是UNIQUE
或NOT UNIQUE
,具体取决于是否存在重复项。
答案 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();