文本对比工具
把两段文本分别粘贴到左右两侧,得到逐行差异(未变 / 新增 / 删除)、新增与删除行数以及两段文本的相似度;可选择严格比较、忽略大小写、忽略空白差异或两者都忽略。
核对两版文案、两段配置或两次接口返回的差异时,逐行对比比肉眼扫要可靠。这个工具输出逐行差异(未变 / 新增 / 删除)、增删行数与相似度,并提供忽略大小写、忽略空白差异的选项 —— 用来回答「是不是只改了一处」这类问题。
需要理解算法口径:逐行对比基于最长公共子序列,所以改动一行会显示成「删除旧行 + 新增新行」两条记录,而不是「修改」一条 —— 这是行级对比的通用表现,不是工具出错。忽略空白差异适合检查代码缩进调整是否夹带了内容改动;如果缩进本身有语义(如 Python、YAML),请用严格比较。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 左右两侧分别粘贴原文与新版本。
- 选择比较方式:严格比较、忽略大小写、忽略空白差异,或两者都忽略。
- 看差异列表与相似度:确认改动符合预期,没有意外被改动的行。
- 行数多时先按相似度判断改动规模,再逐条核对新增与删除。
计算原理与示例
差异是怎么算出来的
先把两段文本按行切开,再用最长公共子序列(LCS)求「最少要删哪些行、加哪些行」才能从左文本变到右文本。因此改动一行会表现为「删除旧行 + 新增新行」两条记录,而不是一条「修改」——这是所有行级 diff 的通用表示法(git diff 也是这样)。
相似度的口径
相似度 = 未变行数 × 2 ÷(左行数 + 右行数)× 100%。这个口径(等价于 1 − 差异行占比)在两段长度不同时仍然稳定:例如左 3 行、右 4 行、未变 2 行,相似度为 2×2 ÷ 7 = 57.14%。完全相同自然得 100%。
为什么建议拆小文本
LCS 需要一张「左行数 × 右行数」的矩阵,计算量随文本长度平方增长。所以本工具限制单侧 3000 行、矩阵单元不超过 250 万——超出会给出明确提示而不是让页面卡住。要比较几千行以上的文件,建议先按模块拆成多段分别对比。
代码示例
Shell 命令行 diff 的三种常用写法
# 标准逐行差异(-u 输出统一格式,便于阅读)
diff -u old.txt new.txt
# 忽略大小写与空白差异
diff -u -i -w old.txt new.txt
# 只统计增删行数(批量核对时用)
diff -u old.txt new.txt | grep -c '^+[^+]'
diff -u old.txt new.txt | grep -c '^-[^-]'
# 需要「词级」对比时用 git diff --word-diff,行级对比会把整行判为改动
JavaScript 前端做快速行级对比
// 简化思路:先抵掉公共前缀与后缀,中间部分即改动区(够快也够用)
const diffStat = (a, b) => {
const L = a.split('\n'), R = b.split('\n');
let i = 0;
while (i < L.length && i < R.length && L[i] === R[i]) i++;
let j = 0;
while (j < L.length - i && j < R.length - i &&
L[L.length - 1 - j] === R[R.length - 1 - j]) j++;
return { same: i + j, added: R.length - i - j, removed: L.length - i - j };
};
diffStat('a\nb\nc', 'a\nB\nc'); // { same: 2, added: 1, removed: 1 }
常见问题
相似度是怎么算出来的?
相似度 = 相同行数 × 2 ÷(左边行数 + 右边行数)× 100%。它本质上是「1 减去差异行占比」,对两段长度不同的情况也成立。完全一致是 100%,两段毫无交集是 0%。
为什么改一行会显示成「删除 + 新增」两条?
因为行级 diff 的最小单位是整行:它不会判断「这一行被编辑了」,只会判断「这一行在或不在」。所以改动一行表现为删除旧行、新增新行两条记录——git diff 和大多数代码对比工具都是这个表示法。
忽略空白差异会不会漏掉真正的改动?
有可能。忽略空白只影响「比较键」,行内的空格与制表符差异会被视为相同,但输出仍显示原文。如果缩进、对齐本身是改动内容(比如 Python 代码缩进、Markdown 列表缩进),就应该用「严格比较」而不是忽略空白。
可以比较多少个字?
单侧上限 3000 行;两段行数的乘积不超过 250 万(例如左右各 1500 行可以,各 2000 行会超限)。超限时页面会提示拆分,而不是静默算出一个不完整的结果。
能直接比较两个文件吗?
当前版本是粘贴文本比较,没有文件上传入口——这是刻意的:纯本地粘贴不涉及任何上传,也避免了大文件把浏览器卡住。需要比较文件时,用编辑器打开后复制粘贴即可。
中文和 emoji 会被算错吗?
行级比较不受影响。字符级比较(同一条改动里的细节)按 Unicode 码点切分,不会把 emoji 的代理对拆成两半,所以 😀 会被当作一个字符,不会出现「半个字符」的乱码。
粘贴的文本会被上传吗?
不会。对比算法完全在浏览器里运行,没有任何网络请求,服务端拿不到你粘贴的内容;本工具也不写计算历史,关闭页面即消失。敏感文本可以放心粘贴。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。