我想一个字符串在C#中的数据进行比较的字符串,在这个例子中字符串比较用字符
string Text1 = "123bob456";
string Text2 = "bobishere";
我想说,如果多于3(或更多)字符的序列匹配,则返回true,在这种情况下,它们都是真的,因为它们都包含“bob”。
但我不知道如何做到这一点,如果这是一个重复的问题,我可以帮助和抱歉,我知道如何说出来。
我想一个字符串在C#中的数据进行比较的字符串,在这个例子中字符串比较用字符
string Text1 = "123bob456";
string Text2 = "bobishere";
我想说,如果多于3(或更多)字符的序列匹配,则返回true,在这种情况下,它们都是真的,因为它们都包含“bob”。
但我不知道如何做到这一点,如果这是一个重复的问题,我可以帮助和抱歉,我知道如何说出来。
您的问题是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;
你的选择将取决于您的特定问题。如果速度太慢,我会尝试第二种方法并修改。
所以你会推荐什么?,而对于后面的一个,我打算用400个字符串做这个,所以我宁愿它快一点。 – user2279389 2013-05-04 21:04:17
从's1.Length - 3'到's1.Length - 2'来捕捉匹配子字符串在's1'结尾的情况。 – 2013-05-04 21:09:25
你可以使用's2.Contains(s1.Substring(i,3))'来方便阅读。 – 2013-05-04 21:09:35
该扩建工程:
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
这也适用,我将其保存到我的课程之一谢谢 – user2279389 2013-05-04 22:08:46
难道必须匹配所有三个字符,或者是它的三个字符序列? – 2013-05-04 20:57:17
忘了补充,我的意思是顺序 – user2279389 2013-05-04 20:57:42