在 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中文網其他相關文章!