文本对比
对比两段文本, 逐行标出新增、删除与修改 —— 支持并排/统一视图, 可忽略大小写、空白与空行。全部在本地计算。
文本对比到底在做什么
差异(diff)是用最简短的方式描述「把 A 变成 B 需要做什么」: 哪些行是新增的、哪些是删除的、哪些没变。逐行比较两个版本, 是回答「改了什么」最快的方法, 不必重读全文。
行是如何匹配的
本工具使用最长公共子序列(LCS)算法: 找出在两段文本中以相同顺序出现的最长行序列, 视其为未变, 其余的行则标记为新增或删除。这和 `git diff` 属于同一类算法。
由于比较以「行」为单位, 插入一行只会显示为一行新增, 而不会引发整段的连锁变化 —— 复查修改时这正是我们想要的。
适用场景
- 代码复查(没有仓库时): 把旧函数和新函数分别粘贴进来。
- 配置文件: 找出能跑和跑不起来的两份配置里, 究竟哪一行不同。
- 合同与文档: 确认只有你预期的条款被改动。
- 翻译校对: 检查译者是否漏译或重复了某段。
- 清单与数据: 对比两次导出的联系人、商品编码或 CSV 行, 找出新增项。
- 写作: 留住上一稿, 看看这一轮编辑实际动了什么。
怎么看结果
- 并排视图把旧文本放左、新文本放右, 未变的行对齐显示 —— 最容易理解上下文中的改动。
- 统一视图更紧凑, 每行带标记: 未变、加号表示新增、减号表示删除。可以像看补丁文件一样从上往下读。
- 结果上方的计数给出新增行数与删除行数, 以及一个相似度: 用共同内容除以总长度得出。相似度高而改动少, 通常说明是细致修改; 相似度低往往意味着整段被重写或替换。
让对比结果符合你的本意
空格与大小写会产生噪声, 把真正关心的改动淹没:
- 忽略大小写把 `User` 和 `user` 视为相同 —— 一次只改了大写的重命名就用它。
- 忽略空白合并空格与缩进差异, 当一侧来自不同 Tab 设置的编辑器时尤其有用。
- 忽略空行去掉重新格式化带来的空行噪声。
如果不确定某个差异是否真实, 建议先看原始结果, 再打开这些选项对比一次。
隐私与局限
很多在线对比工具会把两段文本上传到服务器计算差异。本工具在你自己设备的 JavaScript 里完成运算, 因此源代码、合同与个人信息都留在本机。
实际限制: 算法以「行」为单位, 所以一整段被重写、且写在同一个超长行里的内容, 会显示为「删除一行 + 新增一行」, 而不是词级改动。行数极大(几万行)的场景, 更适合用桌面工具或 `git diff`。
差异是怎么标注的
结果同时用颜色和符号表示, 这样截图或黑白打印也能看懂:
- 删除行: 淡红底 + 左侧红条 + `−` 标记 —— 只存在于左侧输入框。
- 新增行: 淡绿底 + 左侧绿条 + `+` 标记 —— 只存在于右侧输入框。
- 未变行: 白底、标记列为空, 一眼扫过去不受干扰。
- 统计行下方有图例重复这套说明; 勾选 只看差异 会隐藏所有未变行, 这是快速审阅长文件的方式。若两段文本完全一致, 工具会直接说明, 而不是画出一片空白。
FAQ
我的文本会被上传到服务器吗?
不会。两段文本都在你浏览器内用 JavaScript 比较, 不发送、不存储、不记录。你可以在浏览器 Network 面板里边粘贴边验证。
为什么很小的改动, 结果看起来很大?
因为比较以行为单位。如果一整段都在同一行, 任何改写都会表现为删除该行再新增一行。可以试试「忽略空白」, 或者比较前先把超长行拆分。
相似度是什么意思?
它是「匹配上(未变)的内容」与「两版合计总量」之比。完全相同为 100%, 完全无关接近 0%。把它当作「改动幅度」的快速参考, 而不是语义上的精确度量。
超大文件能在这里比吗?
几千行以内没问题, 但算法会随两侧行数增长而变慢; 上万行建议用桌面工具或 git。对大文件来说, 只比较改动的那一段通常更快也更清楚。
怎么看出哪些行变了?
删除行是淡红底并带 − 标记, 只存在于左侧; 新增行是淡绿底并带 + 标记, 只存在于右侧; 未变行白底、标记列为空。勾选“只看差异”可隐藏所有未变行。两段文本一致时工具会直接提示。