2009-05-27 6 views
2

Nous avons une méthode actuelle, qui efface les caractères qui ne sont pas alphabétique ou des espaces qui est tout simplementjava regex support pour les valeurs non ASCII?

String clean(String input) 
{ 
    return input==null?"":input.replaceAll("[^a-zA-Z ]",""); 
} 

qui devrait vraiment être fixé pour soutenir les caractères non-anglais (par exemple S, U, ...). Malheureusement, les classes java regex (par exemple, "\ W", caractère non-mot, "\ p {Alpha}" -US-ASCII seulement}.) Ne semblent pas le supporter. Existe-t-il un moyen de le faire avec java regex plutôt que de boucler manuellement chaque personnage pour le tester?

Répondre

2

Java 6 Le modèle gère Unicode, voir this doc.

séquences d'échappement Unicode tels que \ u2014 dans le code source Java sont traités comme décrit dans §3.3 du Java Language Specification. De telles séquences d'échappement sont également implémentées directement par l'analyseur syntaxique afin que les échappements Unicode puissent être utilisés dans les expressions lues à partir des fichiers ou du clavier. Ainsi, les chaînes "\ u2014" et "\\ u2014", tandis que n'est pas égale, compilent dans le même modèle , qui correspond au caractère avec la valeur hexadécimale 0x2014.

Les blocs Unicode et les catégories sont écrit avec les constructions \ p et \ P comme en Perl. \ p {prop} correspond si l'entrée a la propriété prop, alors que \ P {prop} ne correspond pas si l'entrée a cette propriété. Les blocs sont spécifié avec le préfixe In, comme dans InMongolian. Les catégories peuvent être spécifiées avec le préfixe facultatif Is: Les deux \ p {L} et \ p {IsL} désignent la catégorie des lettres Unicode . Les blocs et les catégories peuvent être utilisés à l'intérieur de et en dehors d'une classe de caractères.