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?
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:
NormalizationForm.FormD
, séparant les caractères de base et les diacritiques. 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!