Java文字列の間の差分を実行する必要があります。元の文字列と差分バージョンを使用して文字列を再構築できるようにしたいと思います。
String a1; // This can be a long text
String a2; // ej. above text with spelling corrections
String a3; // ej. above text with spelling corrections and an additional sentence
Diff diff = new Diff();
String differences_a1_a2 = Diff.getDifferences(a,changed_a);
String differences_a2_a3 = Diff.getDifferences(a,changed_a);
String[] diffs = new String[]{a,differences_a1_a2,differences_a2_a3};
String new_a3 = Diff.build(diffs);
a3.equals(new_a3); // this is true
このライブラリはトリックを行うようです: google-diff-match-patch 。差分からパッチ文字列を作成し、パッチを再適用できます。
edit:別の解決策は https://code.google.com/p/Java-diff-utils/
Apache CommonsにはString diffがあります
org.Apache.commons.lang.StringUtils
StringUtils.difference("foobar", "foo");
Java diff utils ライブラリが役立つ場合があります。
Torstenが言うように、あなたは使うことができます
org.Apache.commons.lang.StringUtils;
System.err.println(StringUtils.getLevenshteinDistance("foobar", "bar"));
大量のデータの違いに対処し、その違いを効率的に圧縮する必要がある場合は、Javaのxdeltaの実装を試してみてください。文字列でも動作するはずです)。
レーベンシュタイン距離 を使用して、アルゴリズムが構築するマトリックスから編集ログを抽出します。ウィキペディアの記事はいくつかの実装にリンクしていますが、中にはJava実装があります.
レーベンシュタインは、 最長共通部分列 アルゴリズムの特殊なケースです。これもご覧ください。