提取 Java 中两个字符串之间的差异差异:火柴:补丁:

2022-09-02 19:41:13

嗨,我有两个字符串:

    String hear = "Hi My name is Deepak"
            + "\n"
            + "How are you ?"
            + "\n"
            + "\n"
            + "How is everyone";
    String dear = "Hi My name is Deepak"
            + "\n"
            + "How are you ?"
            + "\n"
            + "Hey there \n"
            + "How is everyone";

我想获取“嘿,那里\n”的听觉字符串中不存在的内容。我找到了一个方法,但在这种情况下它失败了:

static String strDiffChop(String s1, String s2) {
    if (s1.length() > s2.length()) {
        return s1.substring(s2.length() - 1);
    } else if (s2.length() > s1.length()) {
        return s2.substring(s1.length() - 1);
    } else {
        return "";
    }
}

任何人都可以帮忙吗?


答案 1

谷歌-差异-匹配-补丁

比较匹配和修补程序库提供了可靠的算法来执行同步纯文本所需的操作。

差异:

比较两个纯文本块并有效地返回差异列表。

火柴:

给定一个搜索字符串,在纯文本块中找到其最佳模糊匹配项。针对准确性和位置进行加权。

补丁:

将补丁列表应用于纯文本。尽最大努力应用修补程序,即使基础文本不匹配也是如此。

目前在Java,JavaScript,Dart,C++,C#,Objective C,Lua和Python中可用。无论使用何种语言,每个库都具有相同的 API 和相同的功能。所有版本还具有全面的测试工具。

有一个行或词差异wiki页面,描述了如何进行逐行差异。


答案 2

可以使用来自Apache Commons的。这里是 StringUtils APIStringUtils

public static String difference(String str1, String str2) {
    if (str1 == null) {
        return str2;
    }
    if (str2 == null) {
        return str1;
    }
    int at = indexOfDifference(str1, str2);
    if (at == -1) {
        return EMPTY;
    }
 return str2.substring(at);
}
public static int indexOfDifference(String str1, String str2) {
    if (str1 == str2) {
        return -1;
    }
    if (str1 == null || str2 == null) {
        return 0;
    }
    int i;
    for (i = 0; i < str1.length() && i < str2.length(); ++i) {
        if (str1.charAt(i) != str2.charAt(i)) {
            break;
        }
    }
    if (i < str2.length() || i < str1.length()) {
        return i;
    }
    return -1;
}