Maison > développement back-end > C++ > Comment puis-je effectuer des comparaisons de chaînes insensibles à la casse en C# tout en ignorant les accents ?

Comment puis-je effectuer des comparaisons de chaînes insensibles à la casse en C# tout en ignorant les accents ?

Linda Hamilton
Libérer: 2025-01-24 15:56:10
original
835 Les gens l'ont consulté

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

Gestion des accents et de la casse dans les comparaisons de chaînes C#

Les comparaisons de chaînes C# peuvent être compliquées par les caractères accentués et la sensibilité à la casse. Cet article montre comment effectuer des comparaisons insensibles à la casse tout en ignorant les signes diacritiques (accents).

Les caractères accentués sont souvent traités différemment de leurs homologues non accentués, ce qui conduit à des comparaisons inexactes. Pour résoudre ce problème, nous pouvons prétraiter les chaînes pour supprimer les accents avant la comparaison. La fonction RemoveDiacritics suivante utilise la normalisation Unicode pour y parvenir :

<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>
Copier après la connexion

Cette fonction normalise la chaîne d'entrée, puis parcourt ses caractères, en supprimant toutes les marques sans espacement (accents). Le résultat est une chaîne sans accents.

Maintenant, pour effectuer une comparaison insensible à la casse en ignorant les accents, appliquez simplement cette fonction à vos chaînes avant d'utiliser Equals :

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

bool areEqual = RemoveDiacritics(s1).Equals(RemoveDiacritics(s2), StringComparison.OrdinalIgnoreCase); // true</code>
Copier après la connexion

L'utilisation de StringComparison.OrdinalIgnoreCase fournit une comparaison insensible à la culture et à la casse, garantissant des résultats cohérents sur différents systèmes. Cette approche garantit que les chaînes avec et sans accents sont traitées comme équivalentes lors de comparaisons insensibles à la casse, améliorant ainsi la précision et la robustesse de la logique de votre application.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal