ホームページ > バックエンド開発 > C++ > アクセントを無視しながら、C#でケース非感受性の文字列比較を実行するにはどうすればよいですか?

アクセントを無視しながら、C#でケース非感受性の文字列比較を実行するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-24 15:56:10
オリジナル
794 人が閲覧しました

How Can I Perform Case-Insensitive String Comparisons in C# While Ignoring Accents?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート