【问题标题】:How can I check if a string contains a character in C#?如何检查字符串是否包含 C# 中的字符?
【发布时间】:2012-02-11 09:07:35
【问题描述】:

是否有一个函数可以应用于一个字符串,如果字符串包含一个字符,它将返回 true 或 false。

我有一个或多个字符选项的字符串,例如:

var abc = "s";
var def = "aB";
var ghi = "Sj";

例如,我想做一个函数,如果上面包含小写或大写“s”,它将返回真或假。

if (def.Somefunction("s") == true) { }

同样在 C# 中,我是否需要检查这样的事情是否属实,或者我可以删除“== true”吗?

【问题讨论】:

    标签: c# string


    【解决方案1】:

    您可以使用命名空间System.Linq中的扩展方法.Contains()

    using System.Linq;
    
        ...
    
        if (abc.ToLower().Contains('s')) { }
    

    此外,要检查布尔表达式是否为真,您不需要== true

    由于Contains 方法是一种扩展方法,我的解决方案可能会令人困惑。这里有两个版本不需要你加using System.Linq;

    if (abc.ToLower().IndexOf('s') != -1) { }
    
    // or:
    
    if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
    

    更新

    如果您愿意,您可以编写自己的扩展方法以便于重用:

    public static class MyStringExtensions
    {
        public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
        {
            return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
        }
        
        public static bool ContainsAnyCase(this string haystack, char needle)
        {
            return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
        }
    }
    

    那么你可以这样称呼他们:

    if (def.ContainsAnyCaseInvariant('s')) { }
    // or
    if (def.ContainsAnyCase('s')) { }
    

    在处理用户数据的大多数情况下,您实际上希望使用CurrentCultureIgnoreCase(或ContainsAnyCase 扩展方法),因为这样可以让系统处理大小写问题,这取决于语言。在处理计算问题时,例如 HTML 标签的名称等,您希望使用不变的文化。

    例如:在土耳其语中,小写的大写字母Iı(不带点),而不是i(带点) >.

    【讨论】:

    • 嗯,我没有找到采用 char 参数的 String.Contains 的重载。
    • @ScottSmith 这是System.Linq 中定义的扩展方法。您需要添加using System.Linq;
    • 我更喜欢使用str.IndexOf('s') >= 0,但这可能只是风格上的不同。在阅读理解时,这对我来说更有意义。
    【解决方案2】:

    您可以使用IndexOf 方法,该方法具有适合字符串比较类型的重载:

    if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...
    

    此外,您不需要 == true,因为 if 语句只需要一个计算结果为 bool 的表达式。

    【讨论】:

      【解决方案3】:

      使用函数String.Contains();

      一个示例调用,

      abs.Contains("s"); // to look for lower case s
      

      here 更多来自 MSDN。

      【讨论】:

      • 这没有回答 OP 的问题——他们想知道是大写还是小写的“s”存在——如果字符串中有小写的“s”,你的解决方案才会评估为真。
      【解决方案4】:

      以下应该有效:

      var abc = "sAb";
      bool exists = abc.IndexOf("ab", StringComparison.CurrentCultureIgnoreCase) > -1;
      

      【讨论】:

        【解决方案5】:
        bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0;
        

        【讨论】:

          【解决方案6】:

          如果不知道如何使用字符串和布尔值,在 C# 中工作会很困难。但无论如何:

                  String str = "ABC";
                  if (str.Contains('A'))
                  { 
                      //...
                  }
          
                  if (str.Contains("AB"))
                  { 
                      //...
                  }
          

          【讨论】:

          • MSDN 没有列出接受字符的 Contains 方法,就像在您的第一个示例中一样。要获得该语法,您需要使用 LINQ 或编写您自己的 Contains 扩展。
          【解决方案7】:

          如果您打算经常使用它,您可以创建自己的扩展方法。

          public static class StringExt
          {
              public static bool ContainsInvariant(this string sourceString, string filter)
              {
                  return sourceString.ToLowerInvariant().Contains(filter);
              }
          }
          

          示例用法:

          public class test
          {
              public bool Foo()
              {
                  const string def = "aB";
                  return def.ContainsInvariant("s");
              }
          }
          

          【讨论】:

            【解决方案8】:

            这是一个大多数人都做过的例子

            using System;
            
            class Program
            {
                static void Main()
                {
                    Test("Dot Net Perls");
                    Test("dot net perls");
                }
            
                static void Test(string input)
                {
                    Console.Write("--- ");
                    Console.Write(input);
                    Console.WriteLine(" ---");
                    //
                    // See if the string contains 'Net'
                    //
                    bool contains = input.Contains("Net");
                    //
                    // Write the result
                    //
                    Console.Write("Contains 'Net': ");
                    Console.WriteLine(contains);
                    //
                    // See if the string contains 'perls' lowercase
                    //
                    if (input.Contains("perls"))
                    {
                        Console.WriteLine("Contains 'perls'");
                    }
                    //
                    // See if the string contains 'Dot'
                    //
                    if (!input.Contains("Dot"))
                    {
                        Console.WriteLine("Doesn't Contain 'Dot'");
                    }
                }
            }
            

            【讨论】:

              猜你喜欢
              • 2011-01-21
              • 2021-12-20
              • 2017-09-23
              • 1970-01-01
              • 1970-01-01
              • 2015-02-07
              • 2012-06-27
              • 1970-01-01
              • 2021-11-10
              相关资源
              最近更新 更多