java前后文本比对的代码
时间: 2024-03-21 22:43:29 浏览: 8
以下是Java中实现前后文本比对的代码示例:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TextDiff {
public static void main(String[] args) {
String originalText = "This is the original text.";
String modifiedText = "This is the modified text.";
List<String> originalWords = Arrays.asList(originalText.split("\\s+"));
List<String> modifiedWords = Arrays.asList(modifiedText.split("\\s+"));
int[][] lcs = getLCS(originalWords, modifiedWords);
List<String> originalDiff = getDiff(originalWords, lcs, true);
List<String> modifiedDiff = getDiff(modifiedWords, lcs, false);
System.out.println("Original Diff: " + originalDiff);
System.out.println("Modified Diff: " + modifiedDiff);
}
private static int[][] getLCS(List<String> originalWords, List<String> modifiedWords) {
int[][] lcs = new int[originalWords.size() + 1][modifiedWords.size() + 1];
for (int i = 0; i <= originalWords.size(); i++) {
for (int j = 0; j <= modifiedWords.size(); j++) {
if (i == 0 || j == 0) {
lcs[i][j] = 0;
} else if (originalWords.get(i - 1).equals(modifiedWords.get(j - 1))) {
lcs[i][j] = lcs[i - 1][j - 1] + 1;
} else {
lcs[i][j] = Math.max(lcs[i - 1][j], lcs[i][j - 1]);
}
}
}
return lcs;
}
private static List<String> getDiff(List<String> words, int[][] lcs, boolean isOriginal) {
List<String> diff = new ArrayList<>();
int i = words.size();
int j = lcs[0].length - 1;
while (i > 0 && j > 0) {
if (words.get(i - 1).equals(words.get(j - 1))) {
i--;
j--;
} else if (lcs[i][j - 1] >= lcs[i - 1][j]) {
diff.add(isOriginal ? "[-" + words.get(i - 1) + "]" : "[+" + words.get(j - 1) + "]");
j--;
} else {
diff.add(isOriginal ? "[+" + words.get(j - 1) + "]" : "[-" + words.get(i - 1) + "]");
i--;
}
}
while (i > 0) {
diff.add(isOriginal ? "[-" + words.get(i - 1) + "]" : "");
i--;
}
while (j > 0) {
diff.add(isOriginal ? "" : "[+" + words.get(j - 1) + "]");
j--;
}
return diff;
}
}
```
这段代码实现了将两个文本进行比较,并输出它们之间的差异。在该示例中,我们将原始文本和修改后的文本分别转换为单词列表,并将其传递给`getLCS`方法以获取最长公共子序列。接下来,我们使用`getDiff`方法获取修改差异,并打印输出结果。