如何实现diff
函数,例如Stack Overflow的问题修订历史记录?
你在这里有一个javascript example的diff算法的实现。
基于:
P. Heckel, A technique for isolating differences between files通讯。 ACM,21(4),264--268(1978年)。
实现本身有两个功能,其中一个建议使用:
diffString( String oldFile, String newFile )
此方法需要两个字符串并计算每个字符串的差异。最终结果是用HTML标记的'newFile'(表示oldFile的删除和newFile的添加)。
我会找到FreeBSD diff实用程序的代码并将其用作基线。当许可证允许这种复制时,重新发明轮子是没有意义的。
大多数算法都基于LCS:Longest common subsequence。以有效的方式实施它并不明显。您可能会在网络上找到各种语言的各种实现。
我想唯一的方法是比较形成2个字符串的每个字符。像这样的东西:
void diff(String first,String second) {
int biggest = (first.length() > second.length()) ? first.length() : second.length();
for(int i = 0;i < biggest;i++) {
//compare each char from the longest string with each char from the shorter
// do something with them if they're not equal
}
}
这只是我将如何做的草图。一切都取决于您想要对数据做什么。