Comparaison de chaînes, .NET et espace non cassant
J'ai une application écrite en C# qui fait beaucoup de comparaison de chaînes de caractères. Les cordes sont tirés à partir d'une variété de sources (y compris la saisie de l'utilisateur) et sont ensuite comparés. Cependant, je suis en cours d'exécution dans des problèmes lors de la comparaison de l'espace '32' à l'espace insécable '160'. Pour l'utilisateur ils ont le même aspect et donc, ils s'attendent à un match. Mais quand l'application ne le comparer, il n'y a pas de match.
Quelle est la meilleure façon d'aller à ce sujet? Vais-je avoir à aller à toutes les parties du code qui ne une comparaison de chaîne manuellement et de normaliser les espaces insécables à des espaces? N' .NET propose quelque chose pour l'aider? (J'ai essayé toutes les options de comparaison, mais aucun ne semble pour aider.)
Il a été suggéré que je normaliser les chaînes à la réception, puis laissez la chaîne de la méthode de comparaison il suffit de comparer l'normalisée des chaînes de caractères. Je ne suis pas sûr que ce serait simple de le faire parce que ce qui est normalisé chaîne dans la première place. Que dois-je normaliser ce trop? Bien sûr, pour l'instant je peux convertir les espaces insécables pour les espaces insécables. Mais quoi d'autre pouvez montrer? Il peut potentiellement être très grand nombre de ces règles? Ils pourraient même être contradictoires. (Dans un cas, je veux utiliser une règle et d'un autre je n'ai pas.)
source d'informationauteur Mark
Vous devez vous connecter pour publier un commentaire.
Si c'était moi, je ferais de "normalisation" les cordes que j'ai "tiré dans'; probablement avec une chaîne.Replace(). Ensuite, vous n'aurez pas besoin de changer vos comparaisons n'importe où ailleurs.
Modifier: Marque, c'est une question difficile. C'est vraiment à vous, ou vos clients, ce qui est un "normalisés" de la chaîne. J'ai été dans une situation similaire où le client a exigé que des chaînes de caractères comme:
étaient en fait égal. Vous mai besoin d'un autre normaliseurs pour des situations différentes. De toute façon, je serais encore à faire de la normalisation sur la récupération des chaînes d'origine.
Je suis passé par beaucoup de douleur pour trouver cette réponse simple. Le code ci-dessous utilise une expression régulière pour remplacer les espaces insécables avec des espaces normaux.
Espère que cette aide, Dan
Je te suggère de créer votre propre chaîne de comparer qui s'étend de l'une de celles à l'origine -- faire de la "normalisation" (remplacer l'espace insécable avec espace normal). En plus de l'instance
Equals
méthode, il y a une statiqueString.Equals
qui prend un comparateur.Il doit être
où
\u00A0
est non breaking spaceCe sera de remplacer la non rupture de l'espace avec l'espace normal.
Même sans regex, surtout pour moi quand j'en ai besoin plus tard:
text.Replace('\u00A0', ' ')