【问题标题】:C# contains method for white spacesC# 包含空格的方法
【发布时间】:2013-07-02 02:58:24
【问题描述】:

我在使用 contains 方法检查列表中的特定值时遇到问题,它似乎无法正常工作,是否有另一种方法可以检查带空格的字符串值。

例如:

  string test = "Hello Stack Person";

  if(test.ToLower().Contains("hello stack person"))
  {
    //code to execute
  }

但是我的 if 语句不接受,我做错了什么吗?

谢谢!

【问题讨论】:

  • 您到底想达到什么目标?有什么问题?该代码对我来说很好。
  • "Hello Stack Person".ToLower().Contains("hello stack person")true。您确定这些是您使用的 exact 字符串吗?
  • 你的代码在这里工作(C#4/.NET 4.5)。您的代码中还有其他东西会影响这一点。
  • 如果这些是您使用的确切值,则 if 语句应返回 true。您是否剪切并粘贴了此代码,因为我注意到您在 if statement 上缺少一个右括号 ),猜测但值得一提..
  • @DGibbs 我认为缺少的) 是一个错字:但是这段代码确实像引用的那样工作。因此它不能代表真正的问题代码。

标签: c# if-statement windows-phone-8 contains


【解决方案1】:

首先你应该检查你认为是空格的字符是否真的空格。如果它们是不间断的空间,那么像您发布的简单比较将不起作用。虽然我相信 Unicode 拥有更多可能性,但在大多数情况下这应该可以解决问题。

if (test.ToLower().Replace('\u00A0', ' ').Contains("hello stack person"))
{
    // code
}

现在我不知道您为什么还要以这种方式处理不间断空格,因为它们几乎仅用于正确呈现文本。尽管如此,我已经遇到过这样的问题,我花了一些时间才意识到问题出在哪里,因为我比较的两个字符串 lookme 相同。 p>

【讨论】:

    【解决方案2】:

    我看不出你叫什么list。如果您指的是字符串的 char 数组,请使用 String.IndexOf:

    string test = "Hello Stack Person";
    bool contains = test.IndexOf("hello stack person", StringComparison.OrdinalIgnoreCase) >= 0;
    

    不要使用ToLower 不区分大小写,而是使用StringComparison

    见:Does Your Code Pass The Turkey Test?

    【讨论】:

    • 除此之外,如果您想检查给定字符串是否包含在测试字符串中,您的代码也应该“工作”。
    【解决方案3】:

    使用 trim() 删除空格

    如果您使用的是列表,请使用Select

    var selection = list.Select(x => x.ToString()
                    .Trim().ToLower() == "hello stack person");
    

    要判断真假,请使用Any

    var result = list.Any(x => x.ToString()
                    .Trim().ToLower() == "hello stack person");
    

    【讨论】:

    • Trim() 有什么帮助?如果参数字符串在对象字符串中的任何位置,Contains 应该返回 true。
    • 更新了答案。尝试使用列表中的任何来检查值是否存在
    • 也许"hello stack person" 部分需要修整。看起来这些不是实际使用的字符串。
    • 之前,您说过“3 个字母的字符串”……编程就是要非常精确。我们只能说"Hello Stack Person".ToLower().Contains("hello stack person")true 并且if 语句的主体这个确切的 情况下执行。现在由您来决定,为什么在 您的确切 情况下,一个字符串 (toLower) 实际上 not 包含另一个字符串。 也许另一个字符串有前导/尾随空格,也许一个字符串在单词之间有两个空格,而另一个只有一个......类似的东西。
    • if(mylist[i].person.Contains("Hello Stack Person")) - 现在,有 no ToLower 任何东西,并且您正在检查 with 的字符串是大写的。 .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多