c# - 如何在两个字符串之间删除和添加字符串
问题描述
在我的要求中,我有两个字符串(动态)我想比较两个字符串并删除已删除/修改的字符串并突出显示新添加的字符串。一个字符串是我的旧字符串,一个字符串是新字符串,根据用户输入,有时两者都是相同的。我试过了,但我不能得到输出。请帮我。下面是我在 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/>");
}
}
解决方案
这并不容易。没有一种方法可以像这样比较字符串。有不同的策略,每个都有自己的起起落落。这是一项非常复杂的任务。您最好的方法是使用现有的差异和变化算法实现,如下所示: 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
将差异级别从“字母级别”更改为“单词级别”。
推荐阅读
- node.js - 用 puppeteer 和 node.js 抓取 youtube
- android - API 21 和 22 中 setTorchMode 的替代方案是什么
- excel - 是否可以激活具有变量名的文件
- architecture - 在同一层或单独的层中实施访问控制?
- c++ - 检查一棵树是否只有奇数的函数 C++
- arrays - 映射多个数组并只返回特定的
- javascript - 使用按钮 onclick 填写表单中的字段
- python-3.x - 图片缩放没有选择正确的区域
- ionic-framework - ioinc 中显示 AdMob 横幅时屏幕闪烁?
- javascript - 我可以使用 JavaScript 变量将 document.write 用于另一个 html 标记吗?