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