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

Sam*_*tar 49 c# string

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

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

var abc = "s";
var def = "aB";
var ghi = "Sj";
Run Code Online (Sandbox Code Playgroud)

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

if (def.Somefunction("s") == true) { }
Run Code Online (Sandbox Code Playgroud)

同样在C#中,我需要检查一下这样的东西是真的还是我可以删除"== true"?

And*_*lad 96

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

if (abc.ToLower().Contains('s')) { }
Run Code Online (Sandbox Code Playgroud)

不,要检查布尔表达式是否为真,您不需要 == true

由于该Contains方法是一种扩展方法,我的解决方案似乎让一些人感到困惑.以下是两个版本,不需要您添加using System.Linq;:

if (abc.ToLower().IndexOf('s') != -1) { }

// or:

if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
Run Code Online (Sandbox Code Playgroud)

更新

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用它:

if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,在处理用户数据时,您实际上想要使用CurrentCultureIgnoreCase (或ContainsAnyCase扩展方法),因为这样您就可以让系统处理大小写问题,这取决于语言.在处理计算问题时,比如HTML标记的名称等,您希望使用不变文化.

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

  • @ScottSmith这是[System.Linq](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx)中定义的扩展方法.你需要添加`using System.Linq;` (12认同)
  • 嗯,我没有找到带有char参数的String.Contains的重载. (9认同)
  • 我更喜欢使用`str.IndexOf('s')> = 0`但它可能只是风格差异.阅读理解时,对我来说更有意义. (2认同)

Ric*_*lly 8

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

if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*fiz 5

使用函数 String.Contains();

一个示例调用,

abs.Contains("s"); // to look for lower case s
Run Code Online (Sandbox Code Playgroud)

这里有更多来自 MSDN。

  • 这不能回答 OP 的问题——他们想知道是否存在大写或小写的“s”——如果字符串中存在小写的“s”,您的解决方案只会评估为真。 (2认同)