Я работаю над проектом Java, где есть редактор HTML, и пользователь может ввести текст в html-редактор (ckeditor), и фактический текст HTML сохраняется в базе данных.
Теперь, когда пользователь снова приходит в следующий раз и редактирует тот же текст, я хотел бы показать разницу между ними, сравнив его с базой данных.
Самая важная проблема, с которой я столкнулся, даже если какой-либо инструмент-компаратор знает, что стиль от курсива изменился до полужирного, выход компаратора - это strike-throughs
слово Italic
и показывает Bold
вместо этого.
Но это не объясняет действительное изменение Намерение или Действие. Цель/действие состояла в том, что пользователь сделал это от курсива до полужирного. То, что я ищу, - это инструмент, который вместо того, чтобы показывать, что слово Italic было удалено, а вместо него добавлено Bold, покажет мне слово/предложение Italic
, которое является зачеркнутым, а замена - Bold
слово/фразу.
Я надеюсь, что я имею в виду, это ясно. Я пытался добиться этого в течение довольно долгого времени. Я попробовал diff_match_patch, daisydiff и т.д., Ничего не помогло.
Мои испытания:
/*
String oldTextHtml = mnotes1.getMnotetext();
String newTextHTML = mnotes.getMnotetext();
oldTextHtml = oldTextHtml.replace("<br>","\n");
oldTextHtml = Jsoup.clean(oldTextHtml, Whitelist.basic());
oldTextHtml = Jsoup.parse(oldTextHtml).text();
newTextHTML = newTextHTML.replace("<br>","\n");
newTextHTML = Jsoup.clean(newTextHTML,Whitelist.basic());
newTextHTML = Jsoup.parse(newTextHTML).text();
diff_match_patch diffMatchPatch = new diff_match_patch();
LinkedList<diff_match_patch.Diff> deltas = diffMatchPatch.diff_main(oldTextHtml, newTextHTML);
diffMatchPatch.diff_cleanupSemantic(deltas);
newText += diffMatchPatch.diff_prettyHtml(deltas);
groupNoteHistory.setWhatHasChanged("textchange");
groupNoteHistory.setNewNoteText(newText);
noEdit = true;
*/
List<String> oldTextList = Arrays.asList(mnotes1.getMnotetext().split("(\\.|\\n)"));
List<String> newTextList = Arrays.asList(mnotes.getMnotetext().split("(\\.|\\n)"));
if (oldTextList.size() == newTextList.size()) {
for (int current = 0; current < oldTextList.size(); current++) {
if (isLineDifferent(oldTextList.get(current), newTextList.get(current))) {
noEdit = true;
diff_match_patch diffMatchPatch = new diff_match_patch();
LinkedList<diff_match_patch.Diff> deltas = diffMatchPatch.diff_main(oldTextList.get(current), newTextList.get(current));
diffMatchPatch.diff_cleanupSemantic(deltas);
newText += diffMatchPatch.diff_prettyHtml(deltas);
groupNoteHistory.setWhatHasChanged("textchange");
groupNoteHistory.setNewNoteText(newText);
}
}
} else {
if (!(mnotes.getMnotetext().equals(mnotes1.getMnotetext()))) {
if (isLineDifferent(mnotes1.getMnotetext(), mnotes.getMnotetext())) {
diff_match_patch diffMatchPatch = new diff_match_patch();
LinkedList<diff_match_patch.Diff> deltas = diffMatchPatch.diff_main(mnotes1.getMnotetext(),
mnotes.getMnotetext());
diffMatchPatch.diff_cleanupSemantic(deltas);
newText += diffMatchPatch.diff_prettyHtml(deltas);
groupNoteHistory.setWhatHasChanged("textchange");
noEdit = true;
}
groupNoteHistory.setNewNoteText(newText);
groupNoteHistory.setWhatHasChanged("textchange");
}
}
Если кто-нибудь знает, как я могу это достичь, любезно сообщите мне. Большое спасибо.: -)
Изменить
Меня попросили получить изображение. Объяснение, а затем изображение.
Old text : <style= bold>Hello</style>
new Text : <style = Italic>Hello</style>
Ожидаемый результат разницы: