我正在比较字符串,.Contains()
但我发现了一个问题:
foreach (var pair in cluster)
{
if (pair.Key.Contains("a" + i.ToString()))
{
vlr = pair.Value;
}
}
当我搜索“a1”时,正在检索“a10”、“a11”、“a1..”。还有另一种比较不同的方法==
根据您的评论,我认为您要查找的查询是:
var query = cluster.Where(kvp => kvp.Key
.Split('-')
.Contains("a" + i.ToString()) // Array.Contains, not String.Contains
)
.Select(kvp => kvp.Value);
如果您想确保您的搜索字符串是一个孤立的子字符串,而不是较大子字符串的前缀或后缀,您可以使用正则表达式。例如,要查看一个字符串是否包含a5
or a52
,xa5
您可以这样做:
if (Regex.Matches(input, "\\ba5\\b").Count > 0) ...
这是一个例子:
Console.WriteLine(Regex.Matches("hello a5 world", "\\ba5\\b").Count > 0); // True
Console.WriteLine(Regex.Matches("hello a55 world", "\\ba5\\b").Count > 0); // False
Console.WriteLine(Regex.Matches("hello xa5 world", "\\ba5\\b").Count > 0); // False
正则表达式足够通用,可以让您根据需要调整表达式:您可以使用正面和负面的lookahead/lookbehind。例如,如果您需要确保5
后面没有其他数字,您可以写"a5(?!\\d)"
.
.Contains()
检查字符串中是否包含子字符串或字符串
如果你想看看它们是否相等,你应该使用 somethink like
if (pair.Key.Equals(i.ToString()))
或者
string.Compare(pair.Key, i.ToString()) == 0