C# 比较两个字符串并获得差异

C# 比较两个字符串并获得差异,c#,C#,如何比较c#中的两个字符串并获得差异 例如: 我有一辆车 我有一辆宝马新车 结果:新的bmw您可以使用差异算法执行此任务。论文“”描述了一个非常强大的算法来完成这项任务。对于C#中的一个实现,你可以看一看“”,但我想,如果你对算法的详细工作方式感兴趣的话,看看这篇论文并自己实现它肯定会更有趣。基于你的问题(它有点模糊)。这应该行得通 var first = string1.Split(' '); var second = string2.Split(' '); var primary = fir

如何比较c#中的两个字符串并获得差异

例如:

我有一辆车

我有一辆宝马新车


结果:新的bmw

您可以使用差异算法执行此任务。论文“”描述了一个非常强大的算法来完成这项任务。对于C#中的一个实现,你可以看一看“”,但我想,如果你对算法的详细工作方式感兴趣的话,看看这篇论文并自己实现它肯定会更有趣。

基于你的问题(它有点模糊)。这应该行得通

var first = string1.Split(' ');
var second = string2.Split(' ');
var primary = first.Length > second.Length ? first : second;
var secondary = primary == second ? first : second;
var difference = primary.Except(secondary).ToArray();
在文件顶部,确保包括:

using System.Linq;

您需要确保较大的集合位于<代码>的左侧,除了<代码>(不确定是否有纯Linq方法实现此目的):

static void Main(字符串[]args)
{
string s1=“我有一辆车”;
string s2=“我有一辆宝马新车”;
列表差异;
IEnumerable set1=s1.Split(“”).Distinct();
IEnumerable set2=s2.Split(“”).Distinct();
if(set2.Count()>set1.Count())
{
diff=set2.Except(set1.ToList();
}
其他的
{
diff=set1.Except(set2.ToList();
}
}

我们可以假设您希望它按单词边界分割吗?那么“new”和“car”以及“car”和“bmw”之间的空格呢?你需要知道其中一个单词出现在“car”之前,另一个出现在“car”之后吗?“我有一辆新车”和“我有一辆新车”之间的区别是什么?“新”在这里也有区别吗?删除呢?“我有一辆新车”和“我有一辆车”?你想知道“新”+空格被删除了吗?简言之,你需要告诉我们你对问题的一些假设或限制。@Lasse V.Karlsenno,在这种情况下,区别是“that”,“is”@ChaosPandion,我认为是的:p。我不知道该怎么做:如果一个词出现不止一次怎么办?“我有一辆车我有”vs“我有一辆车”@Lasse V.Karlsenno,空间不重要,只是文字。这是我的问题,我如何比较?因为这将是一个短语,可以包含重复,这将使这两个字符串相同:“我有一辆车”和“我有一辆车”。但是,是的,不确定这是否适用于OP。这适用于重复?例如,“我有一辆车,我有”vs“我有一辆车”如果左侧较小的集合不起作用,则不返回结果,表示distinct必须有参数。和except表示:错误9“System.Collections.Generic.IEnumerable”不包含“except”的定义,并且除了“接受类型的第一个参数”System.Collections.Generic.IEnumerable之外,没有扩展方法“可以找到”(是否缺少using指令或程序集引用?)。您有什么参考资料?VS 2008下的新控制台项目中的默认参考资料是否可以比较两个丰富的文本框数据,是否可以获得缺少的单词数、新添加的(不同的)单词数和修改的单词数。您能告诉我如何做吗?谢谢
    static void Main(string[] args)
    {
        string s1 = "i have a car a car";
        string s2 = "i have a new car bmw";

        List<string> diff;
        IEnumerable<string> set1 = s1.Split(' ').Distinct();
        IEnumerable<string> set2 = s2.Split(' ').Distinct();

        if (set2.Count() > set1.Count())
        {
            diff = set2.Except(set1).ToList();
        }
        else
        {
            diff = set1.Except(set2).ToList();
        }
    }