我正在开发一个用于记笔记的 Java 应用程序。现在,每当用户编辑便笺中的文本时,我都想找出 oldText 和 newText 之间的区别,以便将其添加到该便笺的历史记录中。
为此,我将每个段落拆分为多个字符串,方法是在点处拆分它们。然后我使用 diff-match-patch 比较该字符串列表中的句子。
到目前为止,它可以很好地添加、编辑文本,但是一旦我删除一个句子,就会出现问题。
情况是
old text : sentence1, sentence2, sentence3, sentence4
new Text : sentence1, sentence3, sentence4.
但正因为如此,比较器看到 sentence2 被 sentence3 替换, sentence3 被 sentence4 替换,以此类推。
这不是理想的行为,但我不知道如何纠正这种情况。我将发布我的代码,请让我知道如何正确获取它们之间的差异。
GroupNoteHistory 是我保存 oldText 和 newText 仅更改的对象。我希望我的代码是可以理解的。
// Below is List of oldText and newText splitted at dot.
List<String> oldTextList = Arrays.asList(mnotes1.getMnotetext().split("(\\.|\\n)"));
List<String> newTextList = Arrays.asList(mnotes.getMnotetext().split("(\\.|\\n)"));
// Calculating the size of loop.
int counter = Math.max(oldTextList.size(), newTextList.size());
String oldString;
String newString;
for (int current = 0; current < counter; current++) {
oldString = "";
newString = "";
if (oldTextList.size() <= current) {
oldString = "";
newString = newTextList.get(current);
} else if (newTextList.size() <= current) {
oldString = oldTextList.get(current);
newString = "";
} else {
// isLineDifferent comes from diff_match_patch
if (isLineDifferent(oldTextList.get(current), newTextList.get(current))) {
noEdit = true;
groupNoteHistory.setWhatHasChanged("textchange");
oldString += oldTextList.get(current);
newString += newTextList.get(current);
}
}
if (oldString != null && newString != null) {
if (!(groupNoteHistory.getNewNoteText() == null)) {
if (!(newString.isEmpty())) {
groupNoteHistory.setNewNoteText(groupNoteHistory.getNewNoteText() + " " + newString);
}
} else {
groupNoteHistory.setNewNoteText(newString);
}
if (!(groupNoteHistory.getOldText() == null)) {
if (!(oldString.isEmpty())) {
groupNoteHistory.setOldText(groupNoteHistory.getOldText() + " " + oldString);
}
} else {
groupNoteHistory.setOldText(oldString);
}
}
请让我知道我能做什么。非常感谢。:-)