如何实现检查一个大 txt 文件里数据是否重复的功能

查看 86|回复 8
作者:ttby2018   
如何实现检查一个大 txt 文件里数据是否重复的功能
如题,文件的每一行数据结构都是相同的,字段值通过一个自定义分隔符分割。比如有如下结构数据,id|name|bizNo ,检查 id 是否重复。
最好是 java 实现的

重复, txt, 检查, 文件

GeruzoniAnsasu   
你们 java 八股不是很喜欢考 hashmap 来着
Rickkkkkkk   
@GeruzoniAnsasu 八股文考的一般是内存里存不下, 比如文件是 1T 大小
HojiOShi   
要检查一个包含重复数据的文本文件中的数据是否重复,你可以按照以下步骤进行:
使用 BufferedReader 和文件流读取文件内容。
将每行内容分割为字段,这里使用你提供的自定义分隔符 | 作为字段间分隔符。
使用哈希表(或 HashSet )来存储每个字段的值。
遍历每个字段的值,如果已经在哈希表中存在该值,则说明数据重复,否则将该值添加到哈希表中。
检查哈希表的大小,如果大小大于预期 Repeat Count ,则说明数据存在重复。
下面是一个 Java 示例代码,你可以根据自己的需求进行修改:
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class CheckDuplicateData {
public static void main(String[] args) throws IOException {
String fileName = "data.txt"; // 文件名
String delimiter = "|"; // 自定义分隔符
int repeatCount = 2; // 预期的重复次数
Map countMap = new HashMap(); // 统计每个字段的值出现的次数
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
String[] fields = line.split(delimiter); // 分割每行为字段
for (String field : fields) {
if (!countMap.containsKey(field)) {
countMap.put(field, 0);
}
countMap.put(field, countMap.get(field) + 1);
}
if (countMap.size() > repeatCount) {
System.out.println("数据存在重复");
break;
}
}
}
}
}
在上面的示例代码中,我们使用了 HashMap 来统计每个字段的值出现的次数。在遍历文件内容时,对于每个字段,我们首先检查是否已经存在于哈希表中,如果不存在,则将其添加到哈希表中并记录计数;如果已经存在于哈希表中,则将计数加一。最后,检查哈希表的大小是否大于预期重复次数,如果是,则输出提示信息并退出循环。
mubai   
遍历大 txt 并按照 id 取模拆分成多个小 txt ,读取小 txt 在内存中判断重复。
zihuyishi   
印象中这种问题是分组吧,按照首字母或者什么方式 hash 一下分成 n 个小文件,然后再小文件内依次检查是否有重复的
maoyikun   
Java 的 NIO 随机读取文件 RandomAccessFile 应该可以满足需求
Jirajine   
用 txt 存储大体量的数据是很少见的场景,只在一些传播的裤子中见到过。
正常来说需要对这种数据进行清洗分析之前最好先导入到正经的数据库里。
tutudou   
这个我写过类似的,是大文本分割,无论文本多大不经过内存,通过文件指针的方式直接分割文本。你这个要看具体是多大了,看把所有 ID 加入到内存能不能放的下,如果能放得下直接排序不就得了简单省事。如果放不下,考虑要不炫技使用文件指针的骚方式解决。要不把所有数据存入数据库,把 ID 设为唯一且不重复。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部