文本对比

逐行比较两段文本,高亮显示新增和删除内容。免费在线 Diff 工具,基于 LCS 算法。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
点击「比较」或按 Ctrl+Enter(Mac 为 ⌘+Enter)进行整行比较。输入时不会自动比较。比较在 Web Worker 中运行;点击「取消」或编辑任一输入框,会停止比较并清除旧结果。 「互换」交换两个输入框的内容并清除结果。再次点击「比较」,即可反转比较方向。 「清除」清空两个输入框、结果和状态,并取消未完成的任务。焦点在本工具内时,Ctrl+L(Mac 为 ⌘+L)执行相同操作。
「合并视图」在一列中显示两侧行号。「双栏视图」将每段改动中的删除行与新增行按顺序配对,多出的行配空白。切换视图会回到第一页,无需重新比较。
输入原始文本。CR LF、LF 和单独的 CR 都算换行。空格、大小写和末尾换行的差异均会计入,没有忽略选项。
输入修改后的文本。允许一侧为空,空文本按一条空行参与比较。编辑任一输入框会停止比较并清除结果。
结果 红色 − 行表示删除,绿色 + 行表示新增。计数针对全文。「上一页」和「下一页」每页显示 100 行。比较后可点击「收起输入」腾出结果空间,文本仍保留;「展开输入」可恢复显示。
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

关于此工具

此文本对比工具使用最长公共子序列(LCS)算法进行逐行比较。git diff 和 GNU diff 默认用 Myers 算法求同一类最小差异,两段文本相近时更快,但存在多个同样短的差异时,- 与 + 行的顺序可能不同。非常适合比较代码、配置文件、日志输出或任何需要行级差异的文本。

如何阅读对比结果

「合并视图」把两段文本的所有行排成一列。前两列数字分别是该行在原始文本和修改后文本中的行号。- 表示这一行只在原始文本中出现,+ 表示只在修改后文本中出现,没有标记的行两边相同。例如把

timeout = 30
retries = 3

与

timeout = 60
retries = 3

对比,结果依次是 - timeout = 30、+ timeout = 60 和未改动的 retries = 3。「双栏视图」把每段连续改动里的删除行与新增行按顺序配对:第 1 条删除对第 1 条新增,第 2 条对第 2 条,多出来的一侧留空。CR LF(Windows)、LF 和单独的 CR 都算换行,所以同一段文字换了换行符也判为相同;浏览器文本框本身也会把粘贴的 CR LF 转成 LF(HTML 标准的「换行规范化」)。行尾空格、Tab 与空格、不换行空格(U+00A0)等看不见的差别仍会算作改动。

限制

  • 只按整行比较。 改动一个字符,整行也会标成删除加新增,没有按词或按字符的高亮。
  • 没有忽略选项。 空白和大小写的差异都算作改动。
  • 不折叠上下文。 未改动的行全部显示,输出也没有 @@ 区块头,不能当作补丁文件使用。
  • 大文本需要时间,但不占用页面。 比较在 Web Worker 中进行,页面保持响应,点击「取消」立即停止。算法每次只保留几行得分,不再为原始文本的每一行和修改后文本的每一行建整张表。在 Node.js 22 中测试两个各 10,000 行、每 10 行改 1 行的文件,耗时约 0.7 秒,内存峰值约 31 MB;旧的整表实现约 2.9 秒、946 MB。在浏览器里,Worker 的耗时取决于浏览器如何调度后台线程,可能更长。页面每次只绘制一页 100 行。

大文件、补丁或需要忽略空白的对比,请用命令行:diff -u a.txt b.txt 输出 unified 补丁,diff -w 忽略空白,git diff --no-index a.txt b.txt 可对比仓库外的文件,git diff --word-diff 按词高亮改动。

FAQ

我的文本会发送到服务器吗?

不会。所有差异计算在浏览器中进行,文本不会离开您的设备。

使用什么差异算法?

此工具用行级最长公共子序列(LCS)求出保留行最多的差异。git diff 与 GNU diff 默认用 Myers 算法求同一类最小差异,两段文本相近时更快;存在多个同样短的差异时,两者给出的 - 与 + 行顺序可能不同。

可以比较代码文件吗?

可以。粘贴任何纯文本——源代码、配置文件、文章——此工具都会显示新增和删除的行。

仅空白字符不同的行会显示吗?

会。默认显示所有差异,包括仅空白字符不同的行。