【问题标题】:Checking multiple contains on one string检查一个字符串上的多个包含
【发布时间】:2012-05-12 05:50:48
【问题描述】:

所以我有一个目前看起来像这样的条件......

if (input.Contains(",") || input.Contains("/") || input.Contains(@"\") || input.Contains("."))

我需要添加更多我想要检查的字符,并且想知道是否有更简洁的语法来完成同样的事情?类似于 SQL 的 IN 运算符?

if ( input IN (",", "/", @"\", ....etc )  )

有谁知道在不添加大量代码的情况下完成此任务的任何酷技巧?

【问题讨论】:

标签: c# string contains


【解决方案1】:

考虑使用正则表达式(在括号中指定要检查的字符 - 请记住其中一些必须转义):

Regex.IsMatch(input, @"[,/]");

new[] {",", "/"}.Any(input.Contains)

【讨论】:

    【解决方案2】:

    这个怎么样?

        if(input.IndexOfAny(new char[] { ',', '/', '\\', '.' })>=0)
        {
    
        }
    

    【讨论】:

    • 只有一件事:IndexOfAny 只处理单个字符,它不处理字符串。
    • 在 OP 中只检查单个字符。
    • 当然,这只是一个旁注,因为 IndexOf 实际上有一个带有字符串的重载版本。
    【解决方案3】:

    试试

    If (input.IndexOfAny(new char[] { ',', '/', '\\', '.' }) >= 0) {
        ...
    }
    

    If (input.IndexOfAny(@",/\.".ToCharArray()) >= 0) {
        ...
    }
    

    【讨论】:

      【解决方案4】:

      你可以使用一些 Linq:

      if ( ",/\\.".ToCharArray().Any( c => input.Contains( c ) ) )
      

      【讨论】:

        【解决方案5】:

        您可以使用 String.IndexOfAny -- 它会扫描字符串以查找数组中的一组字符中的任何一个:

        if (e.Label.IndexOfAny(new char[]{',', '/', @'\', '.' /* other chars here */}) > -1)
        

        【讨论】:

          【解决方案6】:

          这是最短的胜利吗?

          @".,/\".Any(input.Contains)
          

          【讨论】:

            【解决方案7】:
            "asdfasdf".ContainsAny(".","/","4");
            
            public static bool ContainsAny(this string stringToCheck, params string[] parameters)
            {
                return parameters.Any(parameter => stringToCheck.Contains(parameter));
            }
            

            【讨论】:

            • 在 C# 中不起作用。类型字符串不包含“ContainsAny”的定义
            【解决方案8】:

            扩展方法可以使事情看起来干净。看看以下内容。

             public static bool ContainsChar(this string input, params char[] characters)
                    {
                        foreach (var character in characters)
                        {
                            if (input.Contains(character))
                            {
                                return true;
                            }
                        }
                        return false;
                    }
            

            该方法的参数是可变参数,因此您可以添加任意数量的字符,并用逗号分隔。如果你不习惯使用扩展方法,修改如下:

            public static bool ContainsChar(string input, params char[] characters)
                        {
                            foreach (var character in characters)
                            {
                                if (input.Contains(character))
                                {
                                    return true;
                                }
                            }
                            return false;
                        }
            

            示例用法如下:

            string myString = "this is my string";
            //extension
            if (myString.ContainsChar('.', '*', '%')) //do something
            
            //static method
            if (ContainsChar(myString, '.', '*', '%')) //do something
            

            【讨论】:

              猜你喜欢
              • 2014-06-25
              • 2013-03-13
              • 1970-01-01
              • 2014-12-27
              • 1970-01-01
              • 2021-05-06
              • 1970-01-01
              • 1970-01-01
              • 2011-08-28
              相关资源
              最近更新 更多