如何在两个字符串之间获取删除和添加的字符串

时间:2018-07-12 11:58:00

标签: c# asp.net .net

Sample Output image

在我的需求中,我有两个字符串(动态地),我想比较两个字符串并剔除已删除/修改的字符串,并突出显示新添加的字符串。一个字符串是我的旧字符串,一个字符串是新字符串,根据用户输入,有时两者都是相同的。我尝试过,但我无法获得输出。请帮我。下面是我在c#中尝试过的代码

Ex: string s1 = "Hello dear Alice and dear Bob.";string s2 = " Hello Alice and dear Bob Have a nice day.";

需要输出:亲爱的爱丽丝和亲爱的鲍勃,您好! 亲爱的开始,祝你有美好的一天。请帮我朋友 我的代码:

if(String.Equals(my_NString,my_String,StringComparison.OrdinalIgnoreCase))
    {
    sb.AppendLine("<div><p style='text-align:justify;'>"+my_NString+" </p></div>");
    sb.AppendLine("<br/>");
    }
    else
    {
    sb.AppendLine("<p style='text-align:justify;border:3px;border-color:#FF0000;padding:1em;color:red;'>"+my_NString+" </p>");
    sb.AppendLine("<br/>");
    }
}

1 个答案:

答案 0 :(得分:2)

这不是那么容易。没有一种方法可以像这样比较字符串。有不同的策略,每种策略都有其起伏。这是一项非常复杂的任务。最好的选择是使用差异和变异算法的现有实现,如下所示: https://github.com/kpdecker/jsdiff(很抱歉,是js)

PS:已修改:

示例确实取决于您要使用的库/引擎。我最熟悉(并且最常使用)的那个看起来像这样:

class Difference {
  public static void Main(string[] args) {
    diff_match_patch match = new diff_match_patch();
    List<Diff> diff = match.diff_main("Hello World.", "Goodbye World.");

    for (int i = 0; i < diff.Count; i++) Console.WriteLine(diff[i]);
  }
}

结果将是:

[(-1, "Hell"), (1, "G"), (0, "o"), (1, "odbye"), (0, " World.")]

您还可以使用match.diff_cleanupSemantic(diff);在显示之前,结果将是:

[(-1, "Hello"), (1, "Goodbye"), (0, " World.")]

因此基本上使用diff_cleanupSemantic将差异级别从“字母级别”更改为“单词级别”。

相关问题