1

我正在比较字符串,.Contains()但我发现了一个问题:

foreach (var pair in cluster)
{
    if (pair.Key.Contains("a" + i.ToString()))
    {
         vlr = pair.Value;
    }
}

当我搜索“a1”时,正在检索“a10”、“a11”、“a1..”。还有另一种比较不同的方法==

4

3 回答 3

1

根据您的评论,我认为您要查找的查询是:

var query = cluster.Where(kvp => kvp.Key
                                    .Split('-')
                                    .Contains("a" + i.ToString())  // Array.Contains, not String.Contains
                         )
                   .Select(kvp => kvp.Value);
于 2013-05-23T02:49:22.880 回答
1

如果您想确保您的搜索字符串是一个孤立的子字符串,而不是较大子字符串的前缀或后缀,您可以使用正则表达式。例如,要查看一个字符串是否包含a5or a52xa5您可以这样做:

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

这是关于 ideone 的演示

正则表达式足够通用,可以让您根据需要调整表达式:您可以使用正面和负面的lookahead/lookbehind。例如,如果您需要确保5后面没有其他数字,您可以写"a5(?!\\d)".

于 2013-05-23T02:30:54.620 回答
0

.Contains()检查字符串中是否包含子字符串或字符串

如果你想看看它们是否相等,你应该使用 somethink like

if (pair.Key.Equals(i.ToString()))

或者

string.Compare(pair.Key, i.ToString()) == 0
于 2013-05-23T02:30:35.763 回答