Сравнение двух абзацев в Java
Я работаю над веб-приложением Java, в котором пользователь может вносить изменения в текстовую область. В этом он может написать один абзац, одно предложение. Итак, что я сейчас пытаюсь сделать, это разделить весь абзац разделителем точек. Как только это будет сделано, я хотел бы проверить, какие предложения изменились. В настоящее время я делаю это, используя цикл for, который не является точным, поскольку мне нужно, чтобы длина массива соответствовала Math.minimum обоих массивов String. Но это не работает, я получаю нулевую строку, измененную из него. Пожалуйста, дайте мне знать, что я делаю неправильно.
Код:
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 абзаца. Что я делаю неправильно?
1 ответ
Использование split("\\.")
для получения точного массива строк, разделенных на String, и для сравнения, используя эту ссылку Google также взглянуть на этот художественный