是否有字符串的StartsWith擴展名,它在字符串中的每個單詞的開始處搜索?StartsWith搜索全部詞的延伸
喜歡的東西: "Ben Stiller".StartsWithExtension("Sti")
返回true
我想要這個,所以我可以做謂語進行搜索。
可以說有一個名單叫人,ICollection<Person>
每個人都有一個屬性名稱,像「本斯蒂勒」或「亞當桑德勒」的值。
我希望能夠做謂語,如:
是否有字符串的StartsWith擴展名,它在字符串中的每個單詞的開始處搜索?StartsWith搜索全部詞的延伸
喜歡的東西: "Ben Stiller".StartsWithExtension("Sti")
返回true
我想要這個,所以我可以做謂語進行搜索。
可以說有一個名單叫人,ICollection<Person>
每個人都有一個屬性名稱,像「本斯蒂勒」或「亞當桑德勒」的值。
我希望能夠做謂語,如:
您可以用文字分割字符串了
Persons.Where(p => p.Name.StartsWithExtension(query))
感謝 (實現的其他更好的方法這是歡迎)首先,像這樣的:
var result = "Ben Stiller".Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
.Any(x => x.StartsWith("Sti"));
當然,你可以爲你自己的擴展方法,這樣寫:
public static bool AnyWordStartsWith(this string input, string test)
{
return input.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
.Any(x => x.StartsWith(test));
}
爲什麼不改爲創建一個「ToWords」方法,然後將結果提供給StartsWith?
事實上,「毛詩補傳」已經種存在:
編輯:於笑聲,讓我們有它的倍數工作
var someNames = new []{ "Sterling Archer", "Cyril Figgus" };
var q = someNames
.Select(name => name.Split(' '))
.SelectMany(word => word)
// the above chops into words
.Where(word => word.StartsWith("Arch"));
那麼你甚至可以檢查它是這樣的:
bool flag = (sample_str.StartsWith("Sti") || sample_str.Contains(".Sti") || sample_str.Contains(" Sti"))
可能最簡潔的方法是使用正則表達式:
public static bool StartsWithExtension(this string value, string toFind)
{
return Regex.IsMatch(value, @"(^|\s)" + Regex.Escape(toFind));
}
這比分割字符''上的源字符串更可靠,因爲它可以處理其他空格字符。
+1。良好的解決方案,更靈活。 –
此外,由於bcl正則表達式中固有的僞cacheiness,您可能會看到重複查詢的性能提升(swag) – JerKimball
public static bool ContainsWordStartingWith(this string aString, string startingWith)
{
return aString.Split(' ').Any(w => w.StartsWith(startingWith));
}
如果姓氏具有其自己的含義 - 在這種情況下,您希望通過它進行搜索/過濾 - 將名稱拆分爲2個屬性是有意義的 - 名字和姓氏(也許是全部名字,以便於打印/記錄或任何你要做的人對象) –
那麼,最簡單的(即使它不是「最好的」)方式可能是'Contains(「」+ str);'... – Carsten
if(sample_str.StartsWith(「Sti」)|| sample_str.Contains(「。Sti」)|| sample_str.Contains(「Sti」))return true;' –