2010-04-21 91 views
0

我正在尋找一種簡單的方法來辨別如果一個字符串包含另一個字符串的任何部分(是正則表達式,內置函數,我不知道,等等。 ..)。例如:字符串不能包含另一個字符串的任何部分.NET 2.0

string a = "unicorn"; 
string b = "cornholio"; 
string c = "ornament"; 
string d = "elephant"; 

if (a <comparison> b) 
{ 
    // match found ("corn" from 'unicorn' matched "corn" from 'cornholio') 
} 

if (a <comparison> c) 
{ 
    // match found ("orn" from 'unicorn' matched "orn" from 'ornament') 
} 

if (a <comparison> d) 
{ 
    // this will not match 
} 

if (a.ContainsAnyPartOf(b))這樣的東西將是太多的希望。

另外,我只能訪問.NET 2.0。

提前致謝!

+0

來自獨角獸的「o」與cornholio中的「o」匹配嗎? – 2010-04-21 13:14:55

+0

所以'a'和'd'不匹配,即使它們都包含子字符串'「n」'? – 2010-04-21 13:15:00

回答

5

這種方法應該可以工作。您需要爲可能匹配的「零件」指定最小長度。我假設你想尋找至少2點的東西,但是可以根據需要設置它的高低。注意:錯誤檢查不包括在內。

public static bool ContainsPartOf(string s1, string s2, int minsize) 
{ 
    for (int i = 0; i <= s2.Length - minsize; i++) 
    { 
     if (s1.Contains(s2.Substring(i, minsize))) 
      return true; 
    } 
    return false; 
} 
+0

完美。我希望在.NET中會有一些東西,但是它的工作原理也一樣! – Aaron 2010-04-21 13:20:24

0

您的要求有點含糊。

您需要爲匹配定義一個最小長度......但是當您指出該部分時,實現算法不應太困難。

我建議將字符串分解爲字符數組,然後使用尾遞歸來查找部件的匹配。

1

根據我對問題的理解,最好的辦法是計算出Levenshtein(或相關值)的距離並將其與閾值進行比較。

相關問題