首頁 > 後端開發 > 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# 中,處理帶重音字符的字符串比較可能會比較棘手。考慮以下示例:

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

s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);</code>
登入後複製

這兩個字符串應該相等,但這兩個語句都返回 false。這是因為字母上的重音被視為不同的字符。為了解決這個問題,我們可以在比較字符串之前採用一種去除附加符號(或重音)的技術。

去除附加符號

以下是一種從字符串中去除附加符號的方法:

<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>
登入後複製

此方法首先將字符串規範化為 D 形式,這會將帶重音的字符拆分為多個字符。然後,它迭代這些字符並過濾掉非間隔標記(即重音)。最後,它重新組合剩餘的字符以形成一個不帶重音的字符串。

要使用此方法,只需在比較它們之前將其應用於兩個字符串。例如:

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

s1.Equals(RemoveDiacritics(s2), StringComparison.InvariantCultureIgnoreCase);  // True</code>
登入後複製

這將正確地評估為 true,認為“héllo”中的重音“e”等效於“hello”中的非重音“e”。

以上是如何在忽略重音字元的同時比較 C# 中的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板