首页 >后端开发 >C++ >如何在 C# 中执行不区分大小写的字符串比较,同时忽略重音?

如何在 C# 中执行不区分大小写的字符串比较,同时忽略重音?

Linda Hamilton
Linda Hamilton原创
2025-01-24 15:56:10798浏览

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

>处理重点和c#字符串比较中的箱子

C#字符串比较可能会因重音字符和案例灵敏度而复杂。 本文演示了如何进行案例不敏感的比较,同时也忽略了变节标记(重音)。

的重音特征通常与非重音对应物的对待不同,导致比较不准确。 为了解决这个问题,我们可以在比较之前进行预处理字符串去除口音。 以下RemoveDiacritics函数使用Unicode归一化来实现这一目标:

<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>
此函数将输入字符串归一化,然后通过其字符迭代,删除任何非间隔标记(重音)。 结果是一个带有口音的字符串。

>

现在,要执行对案例不敏感的比较忽略重音,只需在使用

>之前将此功能应用于字符串:Equals>

<code class="language-csharp">string s1 = "résumé";
string s2 = "resume";

bool areEqual = RemoveDiacritics(s1).Equals(RemoveDiacritics(s2), StringComparison.OrdinalIgnoreCase); // true</code>
使用

>提供了对文化不敏感的案例不敏感的比较,从而确保了不同系统的一致结果。 这种方法可确保在进行案例不敏感的比较时,带有和没有重音的字符串被视为等效,从而提高了应用程序逻辑的准确性和鲁棒性。

以上是如何在 C# 中执行不区分大小写的字符串比较,同时忽略重音?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn