首頁 > 後端開發 > C++ > 在忽略口音的同時,如何比較C#中的字符串?

在忽略口音的同時,如何比較C#中的字符串?

Patricia Arquette
發布: 2025-01-24 16:01:11
原創
335 人瀏覽過

How Can I Compare Strings in C# While Ignoring Accents?

在 C# 字串比較中忽略重音字母

在 C# 中,拼寫相同但重音不同的字串通常被視為不同的實體。當需要忽略重音符號進行字串相等性比較時,這可能會帶來挑戰。

為了解決這個問題,RemoveDiacritics 函數將輸入字串規範化為 NormalizationForm.FormD 並移除所有非間隔標記,有效地去除字元中的所有重音符號。然後,產生的字串被規範化為 NormalizationForm.FormC 以恢復其原始大小寫敏感性。

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

此函數有效地將帶重音字元(例如“é”)轉換為其對應的無重音等效項(例如“e”)。透過使用 NormalizationForm.FormDNormalizationForm.FormCNormalize,可以在去除重音標記的同時保持大小寫敏感性。

例如,以下程式碼示範如何使用 RemoveDiacritics 函數在忽略重音符號的情況下比較字串:

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

string s1NoDiacritics = RemoveDiacritics(s1);
string s2NoDiacritics = RemoveDiacritics(s2);

Console.WriteLine(s1NoDiacritics == s2NoDiacritics); // 输出:True</code>
登入後複製

在此範例中,如果不考慮重音符號,則 s1 和 s2 將被視為不同。但是,在移除重音符號後,s1NoDiacritics 和 s2NoDiacritics 變得相同,從而導致比較結果為 True。

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

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