在我的需求中,我有两个字符串(动态地),我想比较两个字符串并剔除已删除/修改的字符串,并突出显示新添加的字符串。一个字符串是我的旧字符串,一个字符串是新字符串,根据用户输入,有时两者都是相同的。我尝试过,但我无法获得输出。请帮我。下面是我在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/>");
}
}
答案 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
将差异级别从“字母级别”更改为“单词级别”。