我想在我的网站上实现一种版本历史记录,我需要一种比较字符串或对象键的方法。例如:
原始字符串/对象键:更快的棕色狐狸
修改字符串/对象键:快速棕色狐狸 跳过懒兔子
修订:添加跳过懒兔删除呃
我想只保存历史记录表中的修订版。我真的不知道从哪里开始,所以任何想法如何让我去或建议的方法都会非常感激。
我知道find()函数,我怀疑它是使用的主要候选者,但我不知道如何将它可视化为一个解决方案,因为它可以比较字符串“批发”。
答案 0 :(得分:7)
你想要一个差异化算法(我已经标记了这个问题),我强烈建议你不尝试写自己。我已经尝试过 - 并且失败了 - 因为这是一个NP完全问题并且不容易包裹你的想法。相反,请查看diff-match-patch,它具有客户端(demo)的JavaScript和Java实现或服务器端处理。如果您需要进行HTML差异,请查看daisydiff,尽管预先警告HTML / XML差异确实是一种痛苦的体验(see this page for some reasons why)。
可能是差异化的祖父是GNU diff,它也有Java implementation(找到“GNU Diff for Java”)。这个算法比diff-match-patch(dmp)更优化,尽管dmp似乎一直在改进,所以如果你需要比较非常大的字符串(例如兆字节),GNU算法可能是更好的选择。
答案 1 :(得分:1)
好的,那么this呢?不确定它是否像你想的那样使用普通的旧字符串,但它似乎解决了你不知道如何处理Java集成位的问题(因为它已经写好了)。至少应该指出你的写作方向。