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