在我的项目中,我有一个StringBuilder
,它采用下拉列表中的选定值。
StringBuilder builder = new StringBuilder();
builder.Append(ddl_model.SelectedValue);
builder.Append(ddl_language.SelectedValue);
foreach (string str in list)
{
if (str.Contains(builder.ToString()))
{
lstpdfList.Items.Add(str);
}
}
它的作用只有一个值。我想确保我可以检查是否包含两个或多个单词。
我有一个类似PM12_Manual_Rev1_EN的文件。现在我可以找到它是否含有PM12。但是他们有很多。所以我想检查一下是否含有PM12+EN。
1)不要调用生成器。在foreach中的ToString(),它每次都会重建字符串,这违背了StringBuilder的性能目的。
2) 不要使用StringBuilder,使用一个列表来存储要匹配的单词,如果每个选定的值可能包含多个单词,请将它们拆分:
var keywords = new List<string>();
keywords.AddRange(ddl_model.SelectedValue.Split(' '));
keywords.AddRange(ddl_language.SelectedValue.Split(' '));
foreach(string str in list)
if (keywords.Any(keyword => str.Contains(keyword))
lstpdfList.Items.Add(str);
您可以使用正则表达式。
string testString ="PM12_Manual_Rev1_EN";
var wordRegex = new Regex( "PM12.*EN", RegexOptions.IgnoreCase );
if (wordRegex.IsMatch( testString ))
{
Console.WriteLine("we've found multiple matches, REGEX edition");
}
或者你可以像这样使用Contains和Linq:
string testString ="PM12_Manual_Rev1_EN";
var checkWords = new List<String>() {"PM12", "EN"};
if(checkWords.All(w => testString.Contains(w)))
{
Console.WriteLine("we've found multiple matches");
}
您应该使用String.Contains方法,这是最简单的方法!它返回一个值,指示指定的String对象是否出现在此字符串中。
@Shaks是对的。