3

ある種のバージョン履歴を自分のWebサイトに実装したいのですが、文字列またはオブジェクトキーを比較する方法が必要です。例えば:

元の文字列/オブジェクトキー:より速い茶色のキツネ

改訂された文字列/オブジェクトキー:速い茶色のキツネが怠惰なウサギを飛び越えました

改訂:追加された怠惰なウサギを飛び越えた削除されたer

リビジョンのみを履歴テーブルに保存したいと思います。どこから始めたらいいのかわからないので、どうやってやるのか、アプローチのアドバイスをいただければ幸いです。

私はfind()関数を知っており、それが使用の第一候補であると思いますが、いわば「卸売り」という文字列を比較するため、ソリューションとして視覚化する方法がわかりません。

4

2 に答える 2

7

差分アルゴリズムが必要です(私はそのように質問にタグを付けました)。これは、自分で作成しようとしないことを強くお勧めします。これはNP完全問題であり、頭を悩ませるのは簡単ではないため、私は試しましたが失敗しました。代わりに、クライアント(デモ)またはサーバー側の処理用のJavaScriptとJavaの実装があるdiff-match-patchを確認してください。代わりにデイジーディフでHTML差分を実行する必要がある場合は、事前に警告されていますが、HTML / XML差分は本当に苦痛な経験です(いくつかの理由でこのページを参照してください)。

おそらく、diffingの祖父はGNU diffであり、これにもJava実装があります(「GNU Diff forJava」を見つけてください)。このアルゴリズムはdiff-match-patch(dmp)よりも最適化されていますが、dmpは常に改善されているようです。したがって、非常に大きな文字列(メガバイトなど)を比較する必要がある場合は、GNUアルゴリズムの方が適しています。

于 2011-01-04T15:22:12.103 に答える
1

では、これはどうですか?それがあなたが望むように普通の古い文字列を実行するかどうかはわかりませんが、Java統合ビットに取り組む方法がわからないというあなたの懸念に対処しているようです(すでに書かれているため)。少なくとも書き込み方向に向ける必要があります。

于 2011-01-04T19:08:35.350 に答える