8
votes

Comment faire correspondre les caractères Unicode en Java

i m Essayez de faire correspondre les caractères Unicode en Java.

String d'entrée: informa

chaîne correspondant: Information

jusqu'à présent, j'ai essayé ceci: xxx

Il sort comme "pas de match". Des idées?


2 commentaires

Que diriez-vous de îÑfórmåtìön ? Devrait-il "correspondre!"?


Oui, ce serait l'idée. Pour le moment, juste le á ferait.


3 Réponses :


6
votes

est-ce parce que informa n'est pas une sous-chaîne de Informátion du tout?

Comment votre code fonctionnerait-il si vous avez supprimé le dernier A à partir de Informa dans votre regex?


2 commentaires

Informa \ u0301 fonctionne dans la chaîne de motif. Cela concerne le motif.Canon_eq.


J'ai oublié de mettre dans le lien pour cela, Java.sun.com.com /docs/books/tatudial/essential/regex/pattern.htm l (modèle.Canon_eq)



12
votes

Le terme "caractères Unicode" n'est pas suffisamment spécifique. Il correspondrait chaque caractère qui se trouve dans la plage Unicode, donc aussi des caractères "normaux". Ce terme est toutefois très souvent utilisé lorsqu'on réellement signifie "caractères qui ne sont pas dans le Gamme ASCII imprimable ".

dans les termes de regex qui serait [^ \ x20- \ x7e] . xxx

en fonction de ce que vous aimeriez faire avec Cette information, voici quelques réponses de suivi utiles:


3 commentaires

Le Java.Text.Normalizer semble être comme la voie à suivre (balle 2). La correspondance Unicode ne semble tout simplement pas fonctionner comme prévu et je pourrais être frappé avec une pénalité de performance même si elle l'a fait.


Si votre exigence fonctionnelle réelle est «Débarrassez-vous des marques diacritiques», alors c'est la voie à suivre. Votre question initiale n'a été que non formulée comme ça :)


Je pense que la question n'a pas été cristalline claire. L'objectif était de pouvoir faire correspondre des "informations" avec "Informátion", donc la capacité de faire correspondre "A" avec des formes d'une "Á" comme "Å", etc., en supprimant les marques diacritiques, puis la correspondance semble être la voie à suivre aller.



1
votes

On dirait que vous voulez faire correspondre des lettres tout en ignorant les marques diacritiques. Si cela est juste, alors normaliser vos chaînes à la forme NFD, éliminer les marques diagritiques, puis effectuez votre recherche.

String normalized = java.text.Normalizer.normalize(textToSearch, java.text.Normalizer.Form.NFD);
String withoutDiacritical = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
// Search code goes here...


0 commentaires