Maison > développement back-end > C++ > Comment puis-je comparer des chaînes en C# tout en ignorant les accents ?

Comment puis-je comparer des chaînes en C# tout en ignorant les accents ?

Patricia Arquette
Libérer: 2025-01-24 16:01:11
original
335 Les gens l'ont consulté

How Can I Compare Strings in C# While Ignoring Accents?

Ignorer les lettres accentuées dans les comparaisons de chaînes C#

En C#, les chaînes avec la même orthographe mais des accents différents sont généralement traitées comme des entités différentes. Cela peut poser des problèmes lorsque les accents doivent être ignorés pour les comparaisons d'égalité de chaînes.

Pour résoudre ce problème, la fonction RemoveDiacritics normalise la chaîne d'entrée en NormalizationForm.FormD et supprime toutes les marques sans espacement, supprimant ainsi tous les accents des caractères. La chaîne résultante est ensuite normalisée en NormalizationForm.FormC pour restaurer sa sensibilité à la casse d'origine.

<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 convertit efficacement un caractère accentué (par exemple "é") en son équivalent non accentué correspondant (par exemple "e"). En utilisant NormalizationForm.FormD et NormalizationForm.FormC de Normalize, vous pouvez supprimer les marques d'accent tout en conservant le respect de la casse.

Par exemple, le code suivant montre comment utiliser la fonction RemoveDiacritics pour comparer des chaînes en ignorant les accents :

<code class="language-csharp">string s1 = "hello";
string s2 = "héllo";

string s1NoDiacritics = RemoveDiacritics(s1);
string s2NoDiacritics = RemoveDiacritics(s2);

Console.WriteLine(s1NoDiacritics == s2NoDiacritics); // 输出:True</code>
Copier après la connexion

Dans cet exemple, si les accents ne sont pas pris en compte, s1 et s2 seront considérés comme différents. Cependant, la suppression des accents rend s1NoDiacritics et s2NoDiacritics identiques, ce qui rend la comparaison True.

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