如何检查字符串是否包含C#中的字符?

问题描述:

是否有一个函数可以应用于一个字符串,如果一个字符串包含一个字符,它将返回true。如何检查字符串是否包含C#中的字符?

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

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

我想例如做的是,如果上述含有大写或小写都将返回true或false的功能“S”。

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

也在C#中,我需要检查是否这样的事情是真的,或者我可以删除“==真”?

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

if (abc.ToLower().Contains('s')) { } 

没有,检查一个布尔表达式为true,则不需要== 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(以点)

+9

嗯,我不觉得String.Contains的过载,需要一个char参数。 – 2013-03-13 21:19:02

+11

@ScottSmith这是在[System.Linq](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx)中定义的扩展方法。你需要添加'使用System.Linq;' – pauloya 2013-08-29 15:29:08

+2

我更喜欢使用'str.IndexOf('s')> = 0',但它可能只是一种风格上的差异。阅读理解时,对我来说更有意义。 – CSS 2016-02-10 19:13:58

bool containsCharacter = test.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0; 

下面应该工作:

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

使用功能String.Contains();

的示例呼叫,

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

here是从MSDN更多。

+1

这不回答OP的问题 - 他们想知道是否存在大写或小写“s” - 如果小写字母“s”在字符串中,您的解决方案只会评估为真。 – 2012-01-16 12:21:09

可以使用IndexOf方法,这对于字符串比较类型合适的过载能力:

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

而且,你不会需要== true,因为if语句只希望计算结果为bool表达式。

如果不知道如何使用字符串和布尔值,将很难在C#中工作。但不管怎么说:

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

     if (str.Contains("AB")) 
     { 
      //... 
     } 
+3

MSDN没有列出接受字符的Contains方法,就像在第一个例子中一样。要获得该语法,您需要使用LINQ或编写您自己的Contains扩展。 – 2015-04-23 17:24:30

这里有一个例子大多数都做

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'"); 
     } 
    } 
} 

您可以创建自己的extention方法,如果你打算使用这个有很多。

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"); 
    } 
}