2010-07-27 53 views
22

如何比較兩個字符串中的c#並獲得差異?比較兩個字符串並獲得差異

例如:

String1中:我有一輛車

字符串2:我有一個新的汽車寶馬

結果:新寶馬

+1

我們是否可以假設你想它分裂的字邊界? – ChaosPandion 2010-07-27 13:05:41

+2

「新」與「汽車」以及「汽車」與「寶馬」之間的空間如何?你需要知道在「汽車」之前發生過的其中一個單詞嗎? 「我有一輛新車」和「我有一輛新車」之間的區別是什麼? 「新」在這裏也有區別嗎?什麼刪除? 「我有一輛新車」與「我有一輛車」?你想知道「新」+空格被刪除了嗎?總之,你需要告訴我們一些你的假設或限制你的問題。 – 2010-07-27 13:06:06

+0

@Lasse V. Karlsenno,在這種情況下,區別是「that」,「is」 @ChaosPandion,我想是:p。我不知道我該怎麼做:S – Luis 2010-07-27 13:08:24

回答

23

你需要確保大集上的左側Except(不知道是否有純粹的LINQ的方式來實現這一目標):

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(); 
     } 
    } 
+0

這不工作,說不同的必須有論據。除了說:錯誤'System.Collections.Generic.IEnumerable '不包含'Except'的定義,也沒有接受'System.Collections.Generic'類型的第一個參數的擴展方法'Except'。IEnumerable '可以找到(你是否缺少using指令或程序集引用?) – Luis 2010-07-27 13:25:17

+0

適用於.NET 3.5中的我是否正在使用.NET 2.0? – 2010-07-27 13:26:33

+0

也許有些參考。你有什麼參考? – Luis 2010-07-27 13:29:37

8

基於你的問題(這有點含糊。)這應該工作。

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; 
+0

這將使這兩個字符串相同:「我有一輛車」和「我有一輛車」。但是,是的,不確定OP是否可以。 – 2010-07-27 13:08:51

+0

這與重複? 例如「我有一輛車,我有」對「我有一輛車」 – Luis 2010-07-27 13:15:37

+0

返回沒有結果,如果設置在左側 – 2010-07-27 13:29:32