C# の文字列比較におけるアクセントと大文字小文字の処理
C# の文字列比較は、アクセント付き文字や大文字と小文字の区別により複雑になる場合があります。 この記事では、発音区別符号 (アクセント) を無視しながら、大文字と小文字を区別しない比較を実行する方法を説明します。
アクセント付き文字は、アクセント付きでない文字とは異なる扱いを受けることが多く、不正確な比較につながります。 これに対処するには、比較前に文字列を前処理してアクセントを削除します。 次の RemoveDiacritics
関数は、Unicode 正規化を使用してこれを実現します。
<code class="language-csharp">static string RemoveDiacritics(string text) { string formD = text.Normalize(NormalizationForm.FormD); StringBuilder sb = new StringBuilder(); foreach (char ch in formD) { UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch); if (uc != UnicodeCategory.NonSpacingMark) { sb.Append(ch); } } return sb.ToString().Normalize(NormalizationForm.FormC); }</code>
この関数は入力文字列を正規化し、その文字を反復処理して非スペース記号 (アクセント) を削除します。 結果は、アクセントが削除された文字列です。
アクセントを無視して大文字と小文字を区別しない比較を実行するには、Equals
:
<code class="language-csharp">string s1 = "résumé"; string s2 = "resume"; bool areEqual = RemoveDiacritics(s1).Equals(RemoveDiacritics(s2), StringComparison.OrdinalIgnoreCase); // true</code>
StringComparison.OrdinalIgnoreCase
を使用すると、カルチャに依存せず、大文字と小文字を区別しない比較が行われ、異なるシステム間で一貫した結果が保証されます。 このアプローチにより、大文字と小文字を区別しない比較を実行するときに、アクセントの有無にかかわらず文字列が同等に扱われるようになり、アプリケーション ロジックの精度と堅牢性が向上します。
以上がアクセントを無視しながら、C#でケース非感受性の文字列比較を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。