1. ホーム
  2. c#

[解決済み】大文字・小文字を区別しない「Contains(string)

2022-03-17 11:03:16

質問

以下のようにtrueを返すようにする方法はありますか?

string title = "ASTRINGTOTEST";
title.Contains("string");

大文字と小文字の区別を設定できるオーバーロードはないようです。現在、私は両方とも大文字にしていますが、これは馬鹿げています (つまり、私が言っているのは i18n の問題が発生します)。

アップデイト

この質問は古く、それ以来、あなたが十分に調査することを気にするならば、本当に広大で難しいトピックに対する単純な答えを求めたことに気づきました。

ほとんどの場合、モノリンガル、英語のコードベースでは これ という答えで十分です。ここに来る人のほとんどがこのカテゴリーに入るので、この答えが最も一般的な答えだと思われます。

これは しかし、両方のテキストが同じ文化であり、その文化が何であるかがわかるまでは、大文字小文字を区別せずにテキストを比較することはできないという本質的な問題があります。これはあまり人気のない答えかもしれませんが、私はより正しいと思うので、そのようにマークしました。

どのように解決するのですか?

をテストするには、文字列 paragraph は文字列 word (@QuarterMeister さんありがとうございます)

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

どこ culture のインスタンスです。 CultureInfo は、そのテキストが書かれている言語を記述しています。

このソリューションは、以下について透明性があります。 大文字小文字の区別の定義は言語に依存します。 . 例えば、英語では、文字 Ii は、9文字目の大文字と小文字に使われますが、トルコ語では、これらの文字を 11番目と12番目の文字 29文字からなるアルファベットの トルコ語の「i」の大文字は「İ」という聞き慣れない文字である。

したがって、文字列 tinTIN は同じ単語 英語では しかし、異なる単語 トルコ語で . 私の理解では、一方は「精神」を意味し、もう一方はオノマトペの言葉である。(トルコ人の皆さん、私が間違っていたら訂正してください。)

要約すると、「この2つの文字列は同じだが違う場合なのか」という質問に答えるだけです。 テキストが何語であるか知っている場合 . わからなければ、賭けに出るしかない。ソフトウェアにおける英語の覇権を考えると、おそらく次のような方法を取ることになるでしょう。 CultureInfo.InvariantCulture というのも、おなじみの方法で間違ってしまうからです。