首页 > 解决方案 > 如何在两个字符串之间删除和添加字符串

问题描述

样本输出图像

在我的要求中,我有两个字符串(动态)我想比较两个字符串并删除已删除/修改的字符串并突出显示新添加的字符串。一个字符串是我的旧字符串,一个字符串是新字符串,根据用户输入,有时两者都是相同的。我试过了,但我不能得到输出。请帮我。下面是我在 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/>");
    }
}

标签: c#asp.net.net

解决方案


这并不容易。没有一种方法可以像这样比较字符串。有不同的策略,每个都有自己的起起落落。这是一项非常复杂的任务。您最好的方法是使用现有的差异和变化算法实现,如下所示: 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将差异级别从“字母级别”更改为“单词级别”。


推荐阅读