2012-01-16 20 views
28

文字列に文字を含む場合、trueを返す文字列に適用できる関数はありますか?C#で文字列に文字が含まれているかどうかを確認する方法はありますか?

私のような1つの以上の文字オプションを持つ文字列を持っている:私は、たとえばやりたい何

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

は、上記の小文字または大文字が含まれている場合はtrueまたはfalseを返す機能を持っています"s"。

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

また、C#で、私は何かがこのような真であるかどうかを確認する必要があるか、私は「== true」を削除できますか?

答えて

67

あなたが名前空間System.Linqのから拡張メソッド.Contains()を使用することができます:ブール式が真であるかどうかを確認するために、

if (abc.ToLower().Contains('s')) { } 

そして、いや、あなたはContainsので== true

を必要としません。メソッドは拡張メソッドですが、私の解決策はいくつかのものを混乱させるようです。

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; 
    } 
} 
ここ using System.Linq;を追加する必要はありません2つのバージョンがあります

次に、このように呼び出すことができます。

if (def.ContainsAnyCaseInvariant('s')) { } 
// or 
if (def.ContainsAnyCase('s')) { } 

ほとんどの場合、ユーザデータを扱う際には、実際にCurrentCultureIgnoreCase(またはContainsAnyCase拡張メソッド)を使用します。これは、システムが言語に依存する大文字/小文字の問題を処理できるようにするためです。 HTMLタグのような計算上の問題を扱うときは、不変の文化を使いたいと思う。例えば

:トルコでは、小文字で大文字Iı(ドットなし)、なくi(ドット付き)あります。

+9

うーん、私はchar型の引数を取るString.Containsの過負荷を見つけることができません。 –

+11

@ScottSmithこれは[System.Linq](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx)で定義されている拡張メソッドです。 – pauloya

+2

'str.IndexOf( 's')> = 0'を使うのが好きですが、おそらく文体の違いに過ぎません。理解のために読むときは、私にとっては意味があります。 – CSS

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から多いです。if文だけboolに評価される式を期待するので、あなたは、== trueを必要としない。また

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

+1

これはOPの質問には答えません。大文字か小文字かを知りたかったのですが、文字列に小文字の "s"が含まれていれば、ソリューションは真と評価されます。 –

8

あなたは文字列比較のタイプに適した過負荷を持っているIndexOf方法を、使用することができます。

3

文字列とブール値を扱う方法を知らなくても、C#で作業するのは難しいでしょう。しかし、いずれにせよ:ここ

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

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

MSDNは、最初の例のように、文字を受け入れるContainsメソッドをリストしません。その構文を取得するには、LINQを使うか、独自のContains拡張を書く必要があります。 –

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

をやっている例です。あなたはこのロットを使用する場合は、独自の拡張子メソッドを作成することができます。

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"); 
    } 
} 
関連する問題