我想将字符串与c#中的另一个字符串进行比较,在本例中为
string Text1 = "123bob456";
string Text2 = "bobishere";
我想说,如果3个(或更多)字符序列匹配更多,则返回true,在这种情况下它们都是真的,因为它们都包含“bob”。
但是我不知道该怎么做,请你帮帮忙,如果这是一个重复的问题,我知道该如何说出来。
答案 0 :(得分:6)
你的问题是longest common substring problem,它可以在时间上与两个字符串的长度之和成比例地求解。请参阅链接以了解可能的算法。
如果你愿意采取一点性能,你可以通过考虑第一个字符串中的每个3个字符的序列并在第二个字符串中搜索该序列来更简单地做到这一点。这是一个例子(我对C#不是很熟悉,所以请原谅任何语法错误):
for (int i = 0; i < s1.Length - 2; i++)
if (s2.Contains(s1.Substring(i, 3)))
return true;
return false;
您的选择取决于您的具体问题。我会尝试第二种方法并修改它是否太慢。
答案 1 :(得分:1)
此扩展有效:
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