这里我编写的代码显示了文本文件中的重复数字。这里我假设文本文件每行只包含整数。正如您现在所看到的,它在文本文件中显示重复的整数。
我硬编码了文本文件的路径名。
这里我使用了两个哈希集来实现它。我只能使用一个哈希集吗?你能告诉我如何只使用一个哈希集来实现它吗?
import java.io.*;
import java.util.*;
public class 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);
}
}
}
答案 0 :(得分:3)
为了保留现有功能,我看不出你如何使用单个HashSet。但是,您可以使用单个HashMap,其中键是行,而值将是文件中行的出现次数。
附注:
arr
变量无效。答案 1 :(得分:1)
你不需要检查uniquelines是否已经包含该字符串,只需添加它... hashset本身将进行检查,并且不允许重复。 请参阅下面的代码......
如果您不关心多次打印重复项,不仅一次(也许您只是打印它进行测试?),您不需要在下面的代码中设置重复项....但是如果如果你没有跟踪你之前发现的重复项,那么你就无法做到这一点,所以是的,你需要这两套......
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) { }
}
}