使用java编写程序,从一文本文件中读取若干行,实现将重复的单词存入一个Set对象中,并不重复的单词存入另一个Set对象中
时间: 2024-10-24 11:03:07 浏览: 62
在Java中,你可以通过以下步骤来实现这个功能:
1. **打开文件并读取内容**:
首先,你需要使用`BufferedReader`或者`Files.lines()`函数来逐行读取文本文件的内容。
```java
import java.io.BufferedReader;
import java.nio.file.Files;
import java.nio.file.Paths;
String[] lines = Files.readAllLines(Paths.get("file.txt"));
```
2. **处理每一行**:
对于每行,你可以分割成单词数组,然后遍历每个单词。这里我们可以使用`split()`方法以空格分隔字符串。
```java
String line;
for (line : lines) {
String[] words = line.split("\\s+");
}
```
3. **使用Set存储不重复的单词**:
`Set`数据结构不允许有重复元素,所以可以直接将单词添加到`HashSet`中,它会自动去除重复。
```java
Set<String> uniqueWords = new HashSet<>();
for (String word : words) {
uniqueWords.add(word);
}
```
4. **存储重复的单词**:
如果你想找出重复的单词,可以创建另一个`LinkedHashSet`,它的插入顺序保持不变,而且不允许重复。如果一个单词已经存在,那就说明它是重复的。
```java
Set<String> duplicateWords = new LinkedHashSet<>(uniqueWords); // 先复制一次
uniqueWords.clear(); // 清理原始集合
uniqueWords.addAll(words); // 再次添加所有单词
duplicatesToRemove = uniqueWords.stream()
.filter(duplicateWords::contains)
.collect(Collectors.toSet()); // 这里得到的是重复的单词,放在一个新的集合里
```
5. **结果检查与输出**:
最后,你可以打印出重复和不重复的单词。
完整示例代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
public class WordDuplicates {
public static void main(String[] args) {
try (BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"))) {
List<String> allWords = new ArrayList<>();
for (String line; (line = reader.readLine()) != null; ) {
allWords.addAll(Arrays.asList(line.split("\\s+")));
}
Set<String> uniqueWords = new HashSet<>(allWords);
Set<String> duplicateWords = new LinkedHashSet<>(uniqueWords);
uniqueWords.clear();
uniqueWords.addAll(allWords);
System.out.println("Unique Words: " + uniqueWords);
System.out.println("Duplicate Words: " + duplicatesToRemove);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
阅读全文