首页 >后端开发 >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