>백엔드 개발 >C++ >악센트 캐릭터를 무시하면서 C#에서 사례에 민감한 문자열 비교를 수행하려면 어떻게해야합니까?

악센트 캐릭터를 무시하면서 C#에서 사례에 민감한 문자열 비교를 수행하려면 어떻게해야합니까?

DDD
DDD원래의
2025-01-24 15:51:12362검색

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

악센트를 무시하고 C#에서 대소문자를 구분하지 않는 문자열 비교

C# 문자열 비교에서는 대소문자와 악센트 표시를 모두 무시해야 하는 경우가 많습니다. StringComparison.InvariantCultureIgnoreCase 또는 StringComparison.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>

이렇게 하면 "Héllo"와 "Hello"를 동일하게 처리하는 강력한 비교가 보장됩니다. 이 방법은 C#에서 대소문자와 악센트를 구분하지 않는 문자열 비교를 위한 유연하고 정확한 솔루션을 제공합니다.

위 내용은 악센트 캐릭터를 무시하면서 C#에서 사례에 민감한 문자열 비교를 수행하려면 어떻게해야합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.