首頁 >後端開發 >C++ >如何在 C# 中執行不區分大小寫的字串比較,同時忽略重音字元?

如何在 C# 中執行不區分大小寫的字串比較,同時忽略重音字元?

DDD
DDD原創
2025-01-24 15:51:12315瀏覽

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

C# 中不區分大小寫的字符串比較忽略重音

C# 字符串比較通常需要忽略大小寫和重音符號。 StringComparison.InvariantCultureIgnoreCaseStringComparison.OrdinalIgnoreCase 等標準選項無法正確處理重音字符。 這就需要一個定制的解決方案來進行準確的比較。

刪除變音符號(重音)

以下函數可以有效地從字符串中刪除變音符號:

<code class="language-csharp">static string RemoveAccents(string text)
{
    string normalized = text.Normalize(NormalizationForm.FormD);
    StringBuilder sb = new StringBuilder();

    foreach (char c in normalized)
    {
        if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
        {
            sb.Append(c);
        }
    }

    return sb.ToString().Normalize(NormalizationForm.FormC);
}</code>

此功能:

  1. 標準化: 將輸入字符串轉換為 NormalizationForm.FormD,分隔基本字符和變音符號。
  2. 過濾器: 迭代字符,僅附加那些不是非空格標記(重音符號)的字符。
  3. 重新標準化:應用NormalizationForm.FormC進行最終清理。

實現不區分大小寫的比較

要在忽略大小寫和重音的情況下比較字符串,請在比較之前使用 RemoveAccentsToLowerInvariant()

<code class="language-csharp">string str1 = "Héllo";
string str2 = "Hello";

if (RemoveAccents(str1).ToLowerInvariant() == RemoveAccents(str2).ToLowerInvariant())
{
    // Strings are equal (ignoring case and accents)
}</code>

這確保了穩健的比較,將“Hello”和“Hello”視為相同。 此方法為 C# 中大小寫和不區分重音的字符串比較提供了靈活且準確的解決方案。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn