我想一個字符串在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