2

注:これは、現代の言語には正規表現と大文字と小文字を区別しない文字列比較メソッドが組み込まれていることを認識しているため、歴史的な関心からさらに質問しています。

不明な大文字小文字の2つの文字列を比較すると、Microsoftベースの変換方法が小文字ではなく大文字に最適化されていることを読んだことを思い出すことができます。それで:

If (stringA.ToUpper() == stringB.ToUpper()) { ... }

よりも速くなります:

If (stringA.ToLower() == stringB.ToLower()) { ... }

これが当てはまる場合、文字列データを検索する必要がある場合は、小文字ではなく大文字で保存する方がよいでしょうか。

4

3 に答える 3

11

.NETでは、次のようなことができます。

if (String.Compare(stringA, stringB, StringComparison.InvariantCultureIgnoreCase) == 0) {...}

文字列を大文字または小文字に変えることを心配する必要はありません。これについて詳しくは、こちらをご覧ください。

于 2009-06-25T09:32:40.967 に答える
3

一般的なケースで安全に使用できるケースはありません。

どのような選択をしても、場合によっては失敗します。

  • 一部の言語にはケースがありません (実際には問題ではありません)。
  • 一部の言語には、3 番目の「タイトル」ケースがあります。
  • ToUpper("ß") は "SS"、ToLower("SS") は "ss" など、一部の文字は往復しませんが、"ß" と "ss" だけで区別される単語もあります。誤検知は、大文字へのマッピングによって一致します (これにより、大文字と小文字のマッピングが文字列の長さを変更しないという仮定が破られます)。
  • ケース マッピングは言語に依存します。たとえば、ToLower("I") は、結果が "ı" (ラテン小文字ドットなし I) で ToUpper("i") が "İ" (ラテン大文字 I With上のドット)。

これまでのアプローチでは、ToUpper と ToLower に基づいて、英語のテキストのみで動作し、世界のグリフと文字の大部分を無視することを前提としていました。理解を深めるには、大文字と小文字を区別しない比較の基礎としてケース マッピング テーブルを使用する必要があります。

于 2009-06-25T09:46:36.260 に答える