文本对比工具
什么是文本对比?
文本差异工具用于比较两段文本,标出哪些行或片段被新增、删除、修改或保持不变。它适合检查代码片段、配置文件、翻译文案、合同草稿、Markdown 文档、提示词版本、发布说明和日志内容,不必人工逐行对照两份文本。尤其当长内容中只改了很小一处,或空格、标点、顺序、格式可能被意外影响时,差异视图能快速定位问题。需要注意的是,Diff 不会判断新版本是否正确,它只负责清楚展示哪里不同,方便你把审查精力放在真正需要判断的地方。
使用说明
使用说明
- 在左侧输入框粘贴原始文本
- 在右侧输入框粘贴修改后的文本
- 系统会自动计算并高亮差异,状态栏显示新增和删除的行数
审查提示
- 若实际改动是内容而非格式,比较前请先统一行尾和空白字符。
- 代码或法律文本请人工复核高亮处的修改;自动 diff 仅展示差异,不评判意图或正确性。
使用场景
技术原理
行级差异对比建立在最长公共子序列(LCS)问题之上:给定两个行序列 A 和 B,找到在两者中以相同相对顺序出现的最长序列。不在 LCS 中的内容要么是插入(存在于 B 但不在 A 中),要么是删除(存在于 A 但不在 B 中),这正是并排视图中红色和绿色行所显示的内容。朴素的 LCS 动态规划表的时间和空间复杂度为 O(M * N),其中 M 和 N 分别是两个输入的行数。 实际的 diff 引擎使用 Myers 差异算法(Eugene Myers,1986),以 O((M + N) * D) 的时间解决同一问题,其中 D 是两个文件之间的编辑距离。对于大部分内容相同的文件,D 较小,Myers 算法比完整 DP 表快得多;Git 的默认 diff 后端、GitHub 的 Web diff 视图和大多数 IDE 的 diff 面板都使用 Myers 或其衍生算法(patience diff、histogram diff),原因正在于此。Patience diff 会优先对齐唯一出现的行,当代码块被移动时能产生更易读的差异块。 输出是一系列相等/插入/删除操作,在 CLI 工具中渲染为 unified diff 格式(带 @@ -m,n +p,q @@ 块头和每行一个 +/- 前缀),在 Web UI 中渲染为并排着色行。字符级或单词级差异在更细粒度的序列上使用相同算法,当需要将替换计为单个操作时通常搭配 Levenshtein 距离(插入 + 删除 + 替换代价)。Neil Fraser 的 diff-match-patch 库是 Web 端字符级差异的常用参考实现。
- LCS 基础:两个行数组的最长公共子序列定义了未变更的行;其余均为插入或删除。
- Myers 差异算法(1986):时间复杂度 O((M + N) * D),D 为编辑距离;Git、GitHub 和大多数 IDE diff 视图的默认后端。
- 朴素 DP:时间和空间复杂度 O(M * N)——小规模输入可用,但二次方内存使其不适合大文件。
- Patience diff:优先对齐唯一出现的行;对移动或重排的代码块产生更清晰的差异块。
- 输出格式:CLI 使用带 @@ -m,n +p,q @@ 块头的 unified diff;Web UI 使用并排着色行。
- 粒度:行级 / 单词级 / 字符级差异对输入的不同分段应用相同算法。
- Levenshtein 距离:计算插入 + 删除 + 替换;diff-match-patch 是 Web 端的参考实现库。
示例
一眼看出段落里改了一个词
原文:
The server starts on port 3000 by default.
修改后:
The server starts on port 8080 by default.
结果:1 行变化(3000 -> 8080)对比两个版本的配置块
原文: 修改后:
timeout: 30 timeout: 60
retries: 3 retries: 3
debug: false debug: true
log_level: info
结果:新增 2 行,删除 2 行对比发版前后的 release notes
删除(红色):
- Fixed login redirect on Safari 16
新增(绿色):
- Fixed login redirect on Safari 16 and 17
- Added dark mode preference sync
结果:新增 2 行,删除 1 行检测 JSON 键顺序变化
原文: 修改后:
{ "name": "alice", { "id": 1,
"id": 1, "name": "alice",
"role": "admin" } "role": "admin" }
结果:2 行变化(键顺序不同,值相同)常见问题
工具展示的是哪种类型的差异?
行级差异。页面以左右双栏并排展示:左侧用红色高亮显示删除行,右侧用绿色高亮显示新增行。行号便于定位变更。状态栏会显示新增和删除的行数。
使用了什么差异算法?
页面采用最长公共子序列(LCS)算法在行级别上计算编辑脚本。对于常见文档大小,可在你输入时实时运行。该算法会找出把左侧文本变换为右侧文本所需的最短插入与删除序列。
为什么差异结果和 git diff 不一样?
Git 使用自有的 diff 实现,并支持配置算法。本页面使用基于 JavaScript 的 LCS 差异算法,完全在浏览器中运行。输出格式和差异块边界可能与 git diff 略有不同,但行级文本比较的编辑检测结果是正确的。
可以只对比段落或句子内的差异吗?
可以——把两个版本分别粘贴到左右两侧。本工具还会在变更行内进行字符级高亮,这就是为什么「foo 改为 bar」能显示为内联替换,而不是两条互不相关的变更。
会忽略空白吗?
不会。比较默认对空白敏感。空白差异(行尾空格、多余空行、不同的换行符)都会被视为变更显示。
可以按结构对比 JSON 或 XML 吗?
纯文本比较是按行进行的。如要按键比较 JSON(键 'a' 从位置 1 移到位置 3 但值相同时视为无变化),请使用支持 JSON 的差异工具(jsondiffpatch、json-diff)。本页面只用于文本比较。
我的文本会被上传吗?
不会。差异比较在浏览器中运行,两侧输入都在本地处理,不会被传输。