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

如何检查字符串是否包含C#中的字符?,c#,string,C#,String,是否有一个函数可以应用于字符串,如果字符串包含字符,该函数将返回true或false 我有一个或多个字符选项的字符串,例如: var abc = "s"; var def = "aB"; var ghi = "Sj"; 例如,我想做的是有一个函数,如果上面包含小写或大写的“s”,那么它将返回true或false 同样在C#中,我是否需要检查这样的内容是否正确,或者我是否可以删除“==true”您可以使用命名空间系统中的扩展方法。Linq: 使用System.Linq; ... 如果(abc.T

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

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

var abc = "s";
var def = "aB";
var ghi = "Sj";
例如,我想做的是有一个函数,如果上面包含小写或大写的“s”,那么它将返回true或false


同样在C#中,我是否需要检查这样的内容是否正确,或者我是否可以删除“==true”

您可以使用命名空间
系统中的扩展方法。Linq

使用System.Linq;
...
如果(abc.ToLower().Contains('s')){}
此外,要检查布尔表达式是否为true,不需要
==true

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

if(abc.ToLower().IndexOf('s')!=-1){
//或:
if(abc.IndexOf(“s”,StringComparison.CurrentCultureIgnoreCase)!=-1{}
更新

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

公共静态类MyStringExtensions
{
public static bool containsAnyCase不变量(这个字符串是haystack,char-needle)
{
return haystack.IndexOf(针、线比较、不变量文化识别)!=-1;
}
公共静态bool ContainsAnyCase(这个字符串是干草堆、字符针)
{
return haystack.IndexOf(针、线比较、CurrentCultureInogoreCase)!=-1;
}
}
然后你可以这样称呼他们:

if(def.containsAnycase不变量('s')){
//或
if(def.ContainsAnyCase('s')){
在大多数情况下,在处理用户数据时,您实际上希望使用
CurrentCultureInogoreCase
(或
ContainsAnyCase
扩展方法),因为这样可以让系统处理大小写问题,这取决于语言。在处理计算问题时,如HTML标记的名称等,您希望使用不变的区域性


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

以下应适用:

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

使用函数String.Contains()

举个例子

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

更多信息来自MSDN。

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

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

另外,您不需要
==true
,因为if语句只需要一个计算结果为
bool
的表达式。如果不知道如何处理字符串和布尔值,那么在C#中工作将很困难。但无论如何:

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

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

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

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

如果您计划经常使用此方法,您可以创建自己的扩展方法

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

这并不能回答OPs的问题-他们想知道是否存在大写或小写的“s”-只有在字符串中有小写的“s”时,您的解决方案才会计算为true。嗯,我没有发现字符串重载。包含采用char参数。@ScottSmith这是在中定义的扩展方法。您需要使用System.Linq添加
我更喜欢使用
str.IndexOf('s')>=0
,但这可能只是风格上的差异。在阅读理解时,这对我来说更有意义。MSDN没有列出接受字符的Contains方法,如第一个示例中所示。要获得该语法,您需要使用LINQ或编写自己的Contains扩展。
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");
    }
}