代码之家  ›  专栏  ›  技术社区  ›  Aaron

字符串不能包含其他字符串的任何部分.NET 2.0

  •  0
  • Aaron  · 技术社区  · 14 年前

    我正在寻找一种简单的方法来识别一个字符串是否包含另一个字符串的任何部分(即regex、我不知道的内置函数等)。例如:

    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。

    事先谢谢!

    4 回复  |  直到 14 年前
        1
  •  5
  •   juharr    14 年前

    这种方法应该有效。您需要为可能匹配的“部件”指定最小长度。我假设你想找至少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;
    }
    
        2
  •  3
  •   great_llama    14 年前

    我认为您正在寻找 longest common substring ?

        3
  •  1
  •   Benjamin Podszun    14 年前

    根据我对这个问题的理解,你最好的办法是计算 Levenshtein (或相关值)距离,并将其与阈值进行比较。

        4
  •  0
  •   Justin Niessner    14 年前

    你的要求有点含糊。

    您需要为匹配定义一个最小长度……但是当您计算出该部分时,实现一个算法不应该太困难。

    我建议将字符串分解成字符数组,然后使用尾部递归来查找部分的匹配项。