2012-01-16 299 views
28

是否有一個函數可以應用於一個字符串,如果一個字符串包含一個字符,它將返回true。如何檢查字符串是否包含C#中的字符?

我有一個或多個字符選項字符串,例如:

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

我想例如做的是,如果上述含有大寫或小寫都將返回true或false的功能「S」。

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

也在C#中,我需要檢查是否這樣的事情是真的,或者我可以刪除「==真」?

回答

67

您可以從命名空間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

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

下面應該工作:

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

使用功能String.Contains();

的示例呼叫,

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

here是從MSDN更多。

+1

這不回答OP的問題 - 他們想知道是否存在大寫或小寫「s」 - 如果小寫字母「s」在字符串中,您的解決方案只會評估爲真。 – 2012-01-16 12:21:09

8

可以使用IndexOf方法,這對於字符串比較類型合適的過載能力:

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

而且,你不會需要== true,因爲if語句只希望計算結果爲bool表達式。

3

如果不知道如何使用字符串和布爾值,將很難在C#中工作。但不管怎麼說:

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

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

MSDN沒有列出接受字符的Contains方法,就像在第一個例子中一樣。要獲得該語法,您需要使用LINQ或編寫您自己的Contains擴展。 – 2015-04-23 17:24:30

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

您可以創建自己的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"); 
    } 
} 
相關問題