用Arraylist的contains()方法去掉文件中的重复数据

本文介绍了一种使用Java List接口中的contains方法实现去除重复元素的方法。通过在添加元素之前检查该元素是否已存在于List中来避免重复,有效地实现了数据去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List接口里面有个重要方法就是contains(),使用这个方法就可以去重了。

核心代码如下

BufferedWriter bo=new BufferedWriter(new FileWriter("特殊符号.text"));
			String line=null;
			List list=new ArrayList();
			while((line=br.readLine())!=null)
		{
			if(!list.contains(line))
			{
				list.add(line);
				bo.write(line+"\n");
				bo.flush();
				System.out.println(line);
			}
		}

在调用add方法前先用contains方法判断一下现有的list里面包不包含这一项,从而达到了去重的目的。

在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(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值