`
qiuguo0205
  • 浏览: 242363 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用google-diff-match-patch比较文件

 
阅读更多

要对文本文件的进行比较的时候,可以考虑使用google-diff-match-patch,它可以进行比较、匹配和生成补丁的操作,这里将展示一个简单文本比较的例子。

 

首先我们必须接定好文本比较后的输出。假设我们有两段文本“123456789”和“012356889”,然后我们希望输出他们的“差异”,可是这个“差异”怎么表示呢?

 

使用google diff的话,这个差异就是从左边的字符串变成右边的字符串所需要的最少的步骤,每个步骤只能做“保持不变”、“插入”或者“删除”操作,如果我们用的是替换操作呢?那么只能是先“删除”后“插入”。例如对我们说到的两个字符串的差异就是:

1. 插入一个0
2. 保持123不变
3. 删除4
4. 保持56不变
5. 删除7
6. 插入8
7. 保持89不变
 

google diff 使用起来很简单,只需要将它提供的diff_match_patch.java放在你的工程里,然后嗲用它丰富的API就行了,例如对下面的代码:

diff_match_patch dmp = new diff_match_patch();
List<Diff> list = dmp.diff_main("123456789", "012356889");
System.out.println(list);

 

控制台的输出就是:

[Diff(INSERT,"0"), Diff(EQUAL,"123"), Diff(DELETE,"4"), Diff(EQUAL,"56"), Diff(DELETE,"7"), Diff(INSERT,"8"), Diff(EQUAL,"89")]
 

google-diff-match-patch的主页是:http://code.google.com/p/google-diff-match-patch/

他的java版本其实只包含diff_match_patch.java和diff_match_patch_test.java两个源文件,关于更详细的API使用方法,可以参考diff_match_patch_test.java,或者这里http://code.google.com/p/google-diff-match-patch/wiki/API

 

工程还提供了一个Demo在这里: http://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html

 

Tip1. 有的时候我们比较两个文件时,只想比较行级的区别,也就是说操作的单位是行而不是字符,这时该怎么做呢?

http://code.google.com/p/google-diff-match-patch/wiki/LineOrWordDiffs 这里做了详细的介绍,并且介绍了怎样将操作的单位变为单词。

 

Tip2. 有的时候我们的字符串看起来是一样的,但是换行符的不同会导致我们的字符串比较出现问题。这时候我们就需要看一下这些字符串的庐山真面目了,把他们转成Hex形式的字符串。其实操作很简单

String.format("%x", new BigInteger(arg.getBytes(/*YOUR_CHARSET?*/)));

 

参见 http://stackoverflow.com/questions/923863/converting-a-string-to-hexadecimal-in-java

3
2
分享到:
评论
2 楼 zxt1985 2017-03-27  
我的博客里有下载链接
1 楼 rainabc001 2016-05-13  
你好
我在官方上下不了这个代码,你能给我发一份吗
还有就是这个是开源的吧

相关推荐

    google-diff-match-patch比较文件 demo

    要对文本文件的进行比较的时候,可以考虑使用google-diff-match-patch,它可以进行比较、匹配和生成补丁的操作 google-diff-match-patch这个类库提供了强大的算法用于纯文本内容的差异比较,匹配,打补丁,实现...

    Go-Godiff-Google的diff-match-patch库的一个Go移植

    "github.com/google/go-diff/diffmatchpatch" ) func main() { a := "Hello, world!" b := "Hello, Go world!" dmp := diffmatchpatch.New() diffs := dmp.DiffMain(a, b, false) // 打印差异 for _, diff...

    prh_google_diff_match_patch.zip

    谷歌的diff_match_patch库是一个强大的工具,主要用于处理文本的比较、匹配和补丁生成。这个库的核心功能在于高效地计算两个文本之间的差异,并提供合并和应用补丁的能力。在本篇文章中,我们将深入探讨这个库的功能...

    前端HTML内容差异比较diff-match-patch.js

    前端HTML内容差异比较diff-match-patch.js

    angular-diff-match-patch, 用于google差异匹配补丁的AngularJS包装器.zip

    angular-diff-match-patch, 用于google差异匹配补丁的AngularJS包装器 angular-diff-match-patch 这个库只是 google-diff-match-patch的一个包装器。 ( 这里显示一些自定义样式) Angular 2端口要在 Angular 2 项

    Python-DiffMatchPatch是一种处理纯文本的多种语言高性能库

    Python-DiffMatchPatch库是专为处理纯文本而设计的高性能工具,它广泛应用于文本比较、合并和补丁应用等领域。这个库源自Google的一个开源项目,最初由Jonhnson Lee编写,现在支持多种编程语言,包括Python。在...

    diff_match_patch-python:适用于google-diff-match-patch的C ++实现的Python扩展模块

    diff_match_patch-python 一个Python扩展模块,用于包装google-diff-match-patch的C ++实现,以执行非常快速的字符串比较。 google-diff-match-patch是一个Google库,用于计算文本文件之间的差异(&lt; &gt;)。 ...

    diff-match-patch-node:google-diff-match-patch 的节点包装

    var diffMatchPatch = require ( 'diff-match-patch-node' ) ; diffMatchPatch ( ) . diff_main ( 'test A B' , 'test B B' ) ; // =&gt; [ [ 0, 'test ' ], [ -1, 'A' ], [ 1, 'B' ], [ 0, ' B' ] ]

    dmp:基于 google-diff-match-patch 工具的 Diff 工具

    基于Diff 工具。 您必须安装 node.js 才能dmp工作。 编写此工具的主要动机是查看 unicode 符号(尤其是西里尔字母)的字母特定差异。 现在有可能: . 用法 ./dmp file1 file2 [--by-words] git 集成 像这样编辑你...

    diff-match-patch-master.zip

    diff-match-patch是一个开源的JavaScript库,由Google工程师Kevin Decker开发,主要用于处理文本的差异比较、匹配和补丁应用。这个库的核心功能在于其高效地计算两个文本之间的差异,并生成可应用的补丁,从而实现...

    ace-diff:基于google-diff-match-patch构建的Ace编辑器的差异包装器

    Ace-diff 这是的包装,提供了一个2面板的差异/合并工具,该工具可以可视化两个文档中的差异,并允许用户将更改复制到另一个文档中。 它建立在库的顶部。 该lib处理最困难的部分:文档差异的计算。 Ace-diff只是将...

    angular-diff-match-patch:google-diff-match-patch的AngularJS包装器

    角度差异匹配补丁 该库只是的包装。 (此处显示了一些自定义样式) 角度2端口 如果您希望在Angular 2+项目中使用它,请查看以下端口: 建立 ... diff_match_patch : 'diff-match-patch' } ) , ]

    diff_match_patch

    例如,`DiffMatchPatch`类提供了`diff_main()`用于计算差异,`patch_make()`用于生成补丁,`patch_apply()`则用于应用补丁。 总之,google-diff_match_patch库为Java开发者提供了一套强大的文本处理工具,通过高效...

    diff-element:使用 google_diff_match_patch 显示两个文本之间差异的元素

    diff-element first =" I am the very model of a modern Major-General, I've information vegetable, animal, and mineral, I know the kings of England, and I quote the fights historical, From Marathon to...

    如何使用diff和patch

     diff A B &gt;C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。  patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。  patch -R B C 就可以重新还原到A了。  2) 内核补丁  生成  diff -uNr ...

    diff-match-patch

    "diff-match-patch" 是一个著名的开源库,主要用于文本差异比较、匹配和补丁应用,尤其在编程领域中,尤其是在处理版本控制或者文本合并时非常有用。这个库最初由谷歌的Dominic Tarr开发,主要支持Java、Python、...

    diff_match_patch.js

    google算法实现文本对比功能,可以基于react的前端组件codemirror进行使用,详细使用方法可以看我的头条号,程序猿peapeay,谢谢

    diff(Java实现)

    在IT领域,`diff`是一种广泛使用的工具,用于比较两个文件或文本的差异。这个概念源自于Unix操作系统中的命令行工具,但现在已经被许多其他平台和编程语言所采用,包括Java。`diff`算法的核心在于找出两个文件之间的...

    diff-match-patch.rs:用于生锈的diff-match-patch

    `diff-match-patch` 是一个著名的文本差异计算与合并算法库,由谷歌的 David H. Phoenix 开发。这个库主要用于比较、匹配和修补文本之间的差异,广泛应用于版本控制系统、文档编辑器、协同编辑系统等领域。在 Rust ...

Global site tag (gtag.js) - Google Analytics