部分文字列が他の文字列に含まれているかどうかをテストするにはどうすればよいですか?
string1.Contains(string2)
大文字と小文字を区別しません。既存のメソッドがない場合、最適化されたメソッドを書きたいのですが、そのためのポインタはありますか?
編集:グローバリゼーションでも機能するはずです。
チェックを実行する前に、両方の文字列を大文字に変換できます。
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant())
または、大文字と小文字を区別しないことを定義するときに現在のカルチャを考慮に入れたい場合は、次のようにします。
string1.ToUpper().Contains(string2.ToUpper())
ToUpper
または、 を受け入れるオーバーロードを呼び出して、特定のカルチャを使用することもできますCultureInfo
。
小文字ではなく大文字に変換する必要がある理由については、コード分析警告 CA1308: 文字列を大文字に正規化するで説明されています。
文字列は大文字に正規化する必要があります。文字の小さなグループは、小文字に変換されると往復できません。往復とは、あるロケールから、文字データを異なる方法で表現する別のロケールに文字を変換し、変換された文字から元の文字を正確に取得することを意味します。
どの「小さなグループの文字」がこれによって影響を受けるのか疑問に思われるかもしれません.Michael S. Kaplanによると、少なくともいくつかのグルジア文字にはこの問題があるようです.
String.IndexOf メソッドを使用する (String、StringComparison )
string str = "Some test String";
string str2 = "test";
if (str.IndexOf(str2, StringComparison.InvariantCultureIgnoreCase) > 0)
{
//str contains str2
}
else
{
//str does not contain str2
}
string1.ToUpper().Contains(string2.ToUpper())
このオーバーロードを使用できますString.IndexOf Method (String, StringComparison)
為にStringComparison.InvariantCultureIgnoreCase
カルチャに依存した並べ替え規則、インバリアント カルチャを使用し、比較対象の文字列の大文字と小文字を区別せずに文字列を比較します。
string string1 = "YOURSTRING";
bool containsornot = string1 .IndexOf("yourstring", StringComparison.InvariantCultureIgnoreCase) >= 0;
ここに がありDEMO
ます。
string1.IndexOf(string2, StringComparison.InvariantCultureIgnoreCase)を試しましたか
またはStringComparison.OrdinalIgnoreCaseを使用します