java用set类型编写程序读取俩个不同文件并比较所用词汇,统计每个文件出现不同单词的集合 求出交集
时间: 2024-03-26 19:39:18 浏览: 89
以下是一个Java程序示例,用于比较两个文件中不同的单词集合和交集:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class FileWordComparison {
public static void main(String[] args) throws IOException {
String file1 = "file1.txt";
String file2 = "file2.txt";
Set<String> set1 = readFileWords(file1);
Set<String> set2 = readFileWords(file2);
Set<String> diffSet1 = new HashSet<>(set1);
diffSet1.removeAll(set2); // 求set1相对于set2的差集
System.out.println("文件1中不同的单词集合:" + diffSet1);
Set<String> diffSet2 = new HashSet<>(set2);
diffSet2.removeAll(set1); // 求set2相对于set1的差集
System.out.println("文件2中不同的单词集合:" + diffSet2);
Set<String> intersectionSet = new HashSet<>(set1);
intersectionSet.retainAll(set2); // 求set1和set2的交集
System.out.println("文件1和文件2中相同的单词集合:" + intersectionSet);
}
private static Set<String> readFileWords(String fileName) throws IOException {
Set<String> set = new HashSet<>();
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
String[] words = line.split("\\s+"); // 按空格切分单词
for (String word : words) {
set.add(word.toLowerCase()); // 将单词转换为小写并添加到set中
}
}
}
return set;
}
}
```
上述程序中,readFileWords()方法用于读取指定文件中的单词,并将其添加到一个set中。程序使用HashSet实现set,因为HashSet具有O(1)的添加、查找和删除操作的时间复杂度。
在main()方法中,程序使用readFileWords()方法读取两个文件中的单词,并使用set的removeAll()方法求出文件1和文件2中不同的单词集合。最后,程序使用set的retainAll()方法求出文件1和文件2中相同的单词集合。
注意,程序中使用了try-with-resources语句来自动关闭文件读取器。此外,程序还使用了正则表达式"\\s+"来切分单词,以处理多余的空格和制表符。
阅读全文