Maison >développement back-end >C++ >Comment puis-je effectuer des comparaisons de chaînes insensibles à des cas en C # tout en ignorant les caractères accentués?

Comment puis-je effectuer des comparaisons de chaînes insensibles à des cas en C # tout en ignorant les caractères accentués?

DDD
DDDoriginal
2025-01-24 15:51:12311parcourir

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

Comparaison de chaîne insensible à la cas en C # Ignorer les accents

C # Les comparaisons de chaînes nécessitent souvent d'ignorer les marques de cas et d'accent. Des options standard comme StringComparison.InvariantCultureIgnoreCase ou StringComparison.OrdinalIgnoreCase ne gèrent pas les caractères accentués de manière appropriée. Cela nécessite une solution personnalisée pour des comparaisons précises.

Retirer les diacritiques (accents)

La fonction suivante élimine efficacement les diacritiques des chaînes:

<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>

Cette fonction:

  1. normalise: convertit la chaîne d'entrée en NormalizationForm.FormD, séparant les caractères de base et les diacritiques.
  2. Filtres: itère à travers les caractères, ajoutant uniquement ceux qui ne sont pas des marques non d'espacement (accents).
  3. Re-normalise: s'applique NormalizationForm.FormC pour le nettoyage final.

Implémentation de la comparaison insensible à la cas

pour comparer les chaînes tout en ignorant le cas et les accents, utilisez RemoveAccents et ToLowerInvariant() avant la comparaison:

<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>

Cela garantit une comparaison robuste qui traite "héllo" et "bonjour" comme identique. Cette méthode fournit une solution flexible et précise pour les comparaisons de chaînes de cas et d'insensibilité à l'accent dans C #.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn