0

ユーザーがテキスト領域を変更できるJava Webアプリケーションに取り組んでいます。これで、彼は1つの段落、1つの文を書くことができます. だから私が現在やろうとしているのは、段落全体をドット区切りで分割することです。それができたら、どの文章が変わったのかを確認したいと思います。現在、for ループを使用して実行していますが、両方の String 配列の Math.minimum までの配列の長さにする必要があるため、正確ではありません。しかし、それは機能していません。私はそれから変更された文字列をゼロにしています。私が間違っていることを教えてください。

コード :

 String oldText = "";
 String newText = "";

  if(!(oldNotes.getNotetext().equals(newNotes.getNotetext()))){
            String[] strings = newNotes.getNotetext().split(".");
            if(strings.length>0){
                String[] oldNotesArray = oldNotes.getNotetext().split(".");
                if(oldNotesArray.length>0){
                    for(int i=0; i<Math.min(strings.length,oldNotesArray.length);i++){
                        if(!(strings[i].contains(oldNotesArray[i]))){
                            oldText += oldNotesArray[i];
                            newText += strings[i];
                        }
                    }
               }
                noteHistory.setNewText(newText);
                noteHistory.setHistoryText(oldText);
            } else {

                noteHistory.setNewText(newNotes.getNotetext());
                noteHistory.setHistoryText(oldNotes.getNotetext());
            }
        }

したがって、基本的に両方の文字列で、どの文が変更されたかを保存したいと思います。それで全部です。教えてください。ありがとう。便宜上、ドット区切りを使用しているだけです。他に高度な正規表現があれば、それを使用してもかまいません。どうもありがとう。:-)

編集 提案に従って、Google diff-match-patch ライブラリを使用しようとしています。これは私が見つけることができたものですが、それでも違いを分離することに成功していません. それらをデータベースに永続化する必要があるため、それらにもマークを付ける必要がありますが、まだ持っていません。私のコード:

 diff_match_patch diffMatchPatch = new diff_match_patch();
                LinkedList<diff_match_patch.Diff> deltas = diffMatchPatch.diff_main(oldText,newText);
                for(diff_match_patch.Diff d : deltas){
                    if(d.operation== diff_match_patch.Operation.DELETE)
                        oldText += d.text;
                    else if(d.operation== diff_match_patch.Operation.INSERT)
                        newText += d.text;
                    else
                    {
                        oldText += d.text;
                        newText += d.text;
                    }
                }

                System.out.println(oldText);
                System.out.println(newText);

テキストを印刷すると、2 つの段落全体が表示されます。私は何を間違っていますか?

4

1 に答える 1