使用字符进行字符串比较

本文关键字:字符串 比较 字符 | 更新日期: 2023-09-27 18:12:03

我想在c#中比较一个字符串和另一个字符串,在这个例子中

 string Text1 = "123bob456";
 string Text2 =  "bobishere";

我想说,如果序列中匹配的字符超过3个(或更多),则返回true,在这种情况下,它将为真,因为它们都包含"bob"。
但我不知道如何做到这一点,你可以帮助和抱歉,如果这是一个重复的问题,我不知道如何表达。

使用字符进行字符串比较

你的问题是最长公共子串问题,它可以在与两个字符串长度之和成正比的时间内得到解决。

如果您愿意承受一点性能损失,您可以通过考虑第一个字符串中的每个3个字符序列并在第二个字符串中搜索该序列来更简单地做到这一点。下面是一个例子(我不是很熟悉c#,所以请原谅任何语法错误):

for (int i = 0; i < s1.Length - 2; i++)
    if (s2.Contains(s1.Substring(i, 3)))
        return true;
return false;

你的选择取决于你的具体问题。我会尝试第二种方法,如果它太慢,我会修改。

这个扩展可以工作:

public static bool ContainsSubstring(this string string1, string string2, int minLength, StringComparison comparison)
{
    if (minLength <= 0) throw new ArgumentException("Minimum-length of substring must be greater than 0", "minLength");
    if (string.IsNullOrEmpty(string1) || string1.Length < minLength) return false;
    if (string.IsNullOrEmpty(string2) || string2.Length < minLength) return false;
    for (int i = 0; i < string1.Length - minLength + 1; i++)
    {
        string part1 = string1.Substring(i, minLength);
        if (string2.IndexOf(part1, comparison) > -1)
            return true;
    }
    return false;
}
例如:

string Text1 = "123bob456";
string Text2 =  "bobishere";
bool contains = Text1.ContainsSubstring(Text2, 3, StringComparison.CurrentCultureIgnoreCase);  // true