ユーザーがテキスト領域を変更できる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 つの段落全体が表示されます。私は何を間違っていますか?