🧰 UtlKit

去重工具怎么用: 按精确行匹配保留首次出现, 在浏览器

一个文本块, 拆成行, 按精确匹配去重并保留首次出现, 带绿色的删除行计数, 全部在浏览器内计算.

去重工具接收一个文本块, 按行拆开, 删掉每一条与更早某行完全相同的行, 在浏览器内完成. 占位符就是工作示例: apple, banana, apple, cherry, banana, date. 按下 Remove Duplicates 按钮, 结果块在只读框里打印去重后的文本, 上方一行绿字读作 Removed 2 duplicate(s). 不发送任何东西: 拆分, 集合, 拼接全在设备上进行, Clear 按钮清空输入, 输出和计数.

工具接收什么, 给出什么

输入是单个文本框, 10 行高, 可上下拖动, 不需要其他任何东西. 上方有一个 Clear 按钮重置一切, 下方有一个动作按钮 Remove Duplicates, 所以计算不是实时的: 只有按下它, 结果才变. 输出是同样高度的只读文本框, 复制按钮放在 Result 标签旁边, 但只在输出非空时出现. 绿色的计数行, Removed N duplicate(s), 只在 N 大于 0 时出现, 所以没有重复的输入只显示结果, 没有别的.

去重是怎么做的

输入按换行符拆成行的数组, 按顺序遍历, 用一个集合记住所有已保留的行. 一行第一次出现时进集合并进输出列表; 之后每次出现只计一次重复然后丢弃. 保留的行用换行符拼回去, 所以输出就是输入挖掉重复后的样子, 按首次出现的原始顺序, 从不重新排序. 对占位符的 apple, banana, apple, cherry, banana, date, 结果是 apple, banana, cherry, date, 删了 2 条. 遍历是单趟, 所以 100,000 行, 其中 50,000 行唯一, 的输入大约 40 毫秒处理完.

什么算同一行

两行相同, 当且仅当每个字符都匹配, 因为比较是精确字符串测试, 没有任何归一化. 大小写算数, 所以 A 和 a 是不同行, 都保留. 空格算数, 所以带尾随空格的 a 和带前置空格的 a 是不同行, 都保留. 重音算数, 所以 café 和 cafe 是不同行, 都保留. 空行也算行: 空的一行仍是行, 只有一个空格的行是空格行, 所以两条纯空格行归成一条. 如果你的重复只差上述其中一项, 对这个工具它们就不是重复, 计数保持 0.

换行符和空行会发生什么

拆分只看换行符, 所以以换行符结尾的文件会多出一行空的结尾行, 它和任何空行的首次出现一样被保留: a 和 b 各占一行且末尾带换行的输入, 原样回来, 删 0 条. 两个连续空行归成一条; 只有一个换行符的输入删 1 条, 打印空结果, 结果块仍显示但没有复制按钮. Windows 换行是尖刃: 拆分不去回车符, 所以同一文本从 Windows 文件读来与不带回车符的版本不是同一行, 复制的结果会带着回车符.

删除计数怎么读出来

绿字只数被删掉的行, 不数保留的行. 四条相同行 x x x x 删 3 留 1; 交错的输入 1 2 1 2 删 2 留 2; 没有精确重复的输入什么都不显示, 因为那行只在计数大于 0 时渲染. 计数就是输入行数与输出行数之差, 没有别的.

文本去哪里

哪里都不去, 不出设备. 文本框的值由页面读取, 拆分, 集合和拼接都在浏览器内运行, 全程没有任何网络请求. 没有历史, 没有存储的结果: 页面的状态只有三个值, 输入, 输出和计数, Clear 把三个都重置为空和 0. 复制用浏览器剪贴板, 所以只有你按了复制再粘贴到别处, 文本才离开页面.

它不是什么

工具去重行, 不归一化文本: 比较前去掉让近似行显得不同的空格和空行, 用空白字符清理; 去重后把保留的行按字母序排好, 是行排序工具的活; 数每个词出现多少次而不是每行, 是词频统计工具的活. 同类文本工具的详解, 看文本反转指南.

相关工具

常见问题

去重工具会把我的文本上传到服务器吗?

不会. 文本框由页面读取, 唯一的计算是带一个已保留行集合的单趟行遍历, 所以文本不离开设备, 全程没有任何网络请求. 没有历史, 没有存储的结果: 按 Clear 或刷新标签页, 输入, 输出和计数都清空.

为什么我的重复行没被删掉?

匹配是精确的, 逐字符, 没有归一化. 差一个字母大小写, 边缘差一个空格, 或差一个重音的行是不同行, 所以 A 和 a 都保留, 带着 Windows 文件回车符的行与不带回车符的同文本不是同一行. 计数保持 0, 因为它们没有一个与更早某行精确重复.

空行会被删掉吗?

空行也是行, 所以和任何行一样去重: 第一条空行保留, 之后每条空行都计为重复. 只有一个换行符的输入删 1 行, 结果块显示空输出, 没有复制按钮. 以换行符结尾的文件保留那条结尾空行, 因为它是空行的首次出现.

删除计数是什么意思?

它是被删掉的行数, 不是保留的行数, 而且只在大于 0 时渲染. 四条相同行删 3, 交错的一对 1 2 1 2 删 2, 没有精确重复的输入根本不显示计数行. 计数就是输入行数与输出行数之差, 没有别的.

工具会排序结果吗?

不会. 输出按首次出现在输入中的顺序保留行, 这就是副标题说保留原始顺序的原因. 去重后要排序保留的行, 把结果过一遍行排序工具.

相关文章