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

有没有一个函数我可以应用到一个字符串,如果一个字符串包含一个字符,它将返回 true 为 false。

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

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

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

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

同样在 C # 中,我需要检查某些东西是否像这样为真,或者我可以只删除“ = = true”吗?

345760 次浏览

可以使用名称空间 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 (带点)

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

下列措施应该奏效:

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

使用函数字符串包含() ;

一个示例调用,

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