用linq比较字符串

时间:2013-05-23 02:25:02

标签: c# linq

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

foreach (var pair in cluster)
{
    if (pair.Key.Contains("a" + i.ToString()))
    {
         vlr = pair.Value;
    }
}
当我搜索“a1”时,

“a1​​0”,“a11”,“a1 ..”正在检索。 还有另一种比较==

的差异的方法

3 个答案:

答案 0 :(得分:1)

如果您想确保搜索字符串是一个孤立的子字符串,而不是更大子字符串的前缀或后缀,则可以使用正则表达式。例如,要查看字符串是否包含a5但不包含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

这是demo on ideone

正则表达式足以让您根据需要调整表达式:您可以使用positive and negative lookahead/lookbehind。例如,如果您需要确保5 不是后跟另一个数字,则可以写"a5(?!\\d)"

答案 1 :(得分:1)

根据您的评论,我认为您正在寻找的查询是:

var query = cluster.Where(kvp => kvp.Key
                                    .Split('-')
                                    .Contains("a" + i.ToString())  // Array.Contains, not String.Contains
                         )
                   .Select(kvp => kvp.Value);

答案 2 :(得分:0)

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

如果你试图看他们是否相等,你应该使用像

这样的想法
if (pair.Key.Equals(i.ToString()))

string.Compare(pair.Key, i.ToString()) == 0
相关问题