在 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.FormD
和 NormalizationForm.FormC
的 Normalize
,可以在去除重音標記的同時保持大小寫敏感性。
例如,以下程式碼示範如何使用 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中文網其他相關文章!