2013-02-27 120 views
0

我有这个功能,我想比较两个字符串,然后返回有多少单词存在,但以下不起作用。我似乎总是得到0为SameWordCount和1为MasterAddressWordCount查找在两个字符串中有多少个单词相同

任何想法?

// some more string cleaning 
     mastermkAddressKey = mastermkAddressKey.Replace(",", " ").Replace(".", " ").Trim(); 
     mastermkAddressKey = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(mastermkAddressKey)); 
     mastermkAddressKey = mastermkAddressKey.Replace(" ", " |").Replace("| ", "").Replace("|", ""); 
     mastermkAddressKey = QbaseStrings.RemoveDuplicateWords(mastermkAddressKey); 

     duplicatemkAddressKey = duplicatemkAddressKey.Replace(",", " ").Replace(".", " ").Trim(); 
     duplicatemkAddressKey = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(duplicatemkAddressKey)); 
     duplicatemkAddressKey = duplicatemkAddressKey.Replace(" ", " |").Replace("| ", "").Replace("|", ""); 
     duplicatemkAddressKey = QbaseStrings.RemoveDuplicateWords(duplicatemkAddressKey); 

     string[] masterAddressSeparateWords = mastermkAddressKey.Split(new char[' '], StringSplitOptions.RemoveEmptyEntries); 
     string[] duplicateAddressSeparateWords = duplicatemkAddressKey.Split(new char[' '], StringSplitOptions.RemoveEmptyEntries); 

     int SameWordCount = 0; 
     int MasterAddressWordCount = 0; 

     foreach (string masterWord in masterAddressSeparateWords) 
       { 
        foreach (string duplicateWord in duplicateAddressSeparateWords) 
        { 
         if (masterWord == duplicateWord) {SameWordCount++;} 
        } 

        MasterAddressWordCount++; 
       } 

     int WordDifference = MasterAddressWordCount - SameWordCount; 

     if (WordDifference == 0) { return "sure"; } 
     if (WordDifference > 0 && WordDifference < 3) { return SameWordCount.ToString() + " " + MasterAddressWordCount.ToString(); } 
     if (WordDifference > 2 && WordDifference < 5) { return "possible"; } 

回答

0

我已经通过更改以下行解决了这个问题:

string[] masterAddressSeparateWords = mastermkAddressKey.Split(new char[' '], StringSplitOptions.RemoveEmptyEntries); 
     string[] duplicateAddressSeparateWords = duplicatemkAddressKey.Split(new char[' '], StringSplitOptions.RemoveEmptyEntries); 

要:

string[] masterAddressSeparateWords = mastermkAddressKey.Split(' '); 
string[] duplicateAddressSeparateWords = duplicatemkAddressKey.Split(' '); 
3

你的问题是因为new char[' '],你的意思是这里new char[] {' '}。编译器(非常有帮助)在这里将' '转换为int,使其成为char[int]。这意味着,这样的:

new char[' '] 

真的是一样的:

new char[32] 

这最终是一个大的无用char[]阵列,而不是单一的空间你之后。


您可以通过查看IL看到这个干净的产生:

var a = new char[' ']; 

那就是:

IL_0001: ldc.i4.s 20 
IL_0003: newarr  System.Char 
IL_0008: stloc.0  // a 

20是的32

一个十六进制表示
相关问题