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

时间:2012-01-16 12:05:49

标签: c# string

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

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

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

我想做的例子是,如果上面包含一个小写或大写的“s”,那么它将返回true或false。

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

同样在C#中,我是否需要检查某些内容是否属实,或者我可以删除“== true”吗?

8 个答案:

答案 0 :(得分:94)

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

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扩展方法),因为这样您可以让系统处理上层/ lowercase问题,取决于语言。在处理计算问题时,比如HTML标签的名称等,您希望使用不变文化。

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:3)

以下内容应该有效:

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

使用函数String.Contains();

示例电话,

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

here更多来自MSDN。

答案 6 :(得分:2)

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

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

答案 7 :(得分:0)

这是一个大多数已经完成的例子

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