是否有字符串的StartsWith的扩展,它在字符串中的每个单词的开头搜索?
像:
"Ben Stiller".StartsWithExtension("Sti")
返回true
我想这样,所以我可以为搜索做出一个谓词。
让我们说有一个名为Persons的列表,ICollection<Person>
每个人都有一个属性名称,其值为“Ben Stiller”或“Adam Sandler”。
我希望能够执行以下谓词:
Persons.Where(p => p.Name.StartsWithExtension(query))
由于 (欢迎实现这一目标的其他更好的方法)
答案 0 :(得分:6)
您可以先按字词分割字符串,如下所示:
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));
}
答案 1 :(得分:2)
可能最简洁的方法是使用正则表达式:
public static bool StartsWithExtension(this string value, string toFind)
{
return Regex.IsMatch(value, @"(^|\s)" + Regex.Escape(toFind));
}
这比在字符''上拆分源字符串更可靠,因为它可以处理其他空白字符。
答案 2 :(得分:1)
为什么不创建一个“ToWords”方法,然后将结果提供给StartsWith?
事实上,“ToWords”已经存在:
编辑:对于咯咯笑,我们让它在多个
上工作 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"));
答案 3 :(得分:0)
你甚至可以这样检查:
bool flag = (sample_str.StartsWith("Sti" ) || sample_str.Contains(".Sti") || sample_str.Contains(" Sti"))
答案 4 :(得分:0)
public static bool ContainsWordStartingWith(this string aString, string startingWith)
{
return aString.Split(' ').Any(w => w.StartsWith(startingWith));
}