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

アクセントされた文字を無視しながら、C#の文字列を比較するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-24 16:07:10
オリジナル
493 人が閲覧しました

How Can I Compare Strings in C# While Ignoring Accented Characters?

c#の文字列を比較する場合、アクセント文字を無視してください

c#では、ストレス文字で文字列を処理することがより困難です。次の例を考えてみましょう:

これらの2つの文字列は等しくなければなりませんが、両方のステートメントがfalseを返します。これは、文字のアクセントが異なる文字と見なされるためです。この問題を解決するために、文字列を比較する前に、追加のシンボル(または絡み合った)を削除するテクノロジーを使用できます。

<code class="language-csharp">string s1 = "hello";
string s2 = "héllo";

s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);</code>
ログイン後にコピー
追加のシンボルを削除します

以下は、文字列から追加のシンボルを削除する方法です。 このメソッドは、最初に文字列をdフォームに標準化します。これは、ストレスのある文字を持つ複数の文字に分割されます。これらのキャラクターを反復し、非インターバルマーク(つまり、ストレス)をフィルタリングします。最後に、残りの文字を再開して、ストレスせずに文字列を形成します。

この方法を使用するには、比較する前に2つの文字列に適用してください。たとえば、

<code class="language-csharp">static string RemoveDiacritics(string text)
{
    // 将字符串规范化为 Unicode 规范化形式 D
    string formD = text.Normalize(NormalizationForm.FormD);

    // 创建一个 StringBuilder 来保存结果字符串
    StringBuilder sb = new StringBuilder();

    // 迭代规范化字符串中的字符
    foreach (char ch in formD)
    {
        // 检查字符是否不是非间隔标记
        UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch);
        if (uc != UnicodeCategory.NonSpacingMark)
        {
            // 将字符附加到 StringBuilder
            sb.Append(ch);
        }
    }

    // 将 StringBuilder 转换为字符串并将其规范化为 Unicode 规范化形式 C
    return sb.ToString().Normalize(NormalizationForm.FormC);
}</code>
ログイン後にコピー
これは、「héllo」のストレス「e」は「hello」の非ストレス「e」と同等であると考えて、真実として正しく評価されます。

以上がアクセントされた文字を無視しながら、C#の文字列を比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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