Comment filtrer chaîne de caractères indésirables en utilisant les regex?
En gros , je me demande si il y a une pratique de classe ou une méthode pour filtrer une Chaîne de caractères indésirables. La sortie de la méthode devrait être le 'nettoyés' Chaîne. C'est à dire:
String dirtyString = "This contains spaces which are not allowed"
String result = cleaner.getCleanedString(dirtyString);
Attend résultat serait:
"Thiscontainsspaceswhicharenotallowed"
Un meilleur exemple:
String reallyDirty = " this*is#a*&very_dirty&String"
String result = cleaner.getCleanedString(dirtyString);
J'attends le résultat:
"thisisaverydirtyString"
Parce que, je laisse le nettoyeur de savoir que ' ', '*', '#', '& " et " _ " sont sales caractères. Je peux le résoudre en utilisant un blanc/liste noire tableau de caractères. Mais je ne veux pas ré-inventer la roue.
Je me demandais si il y a déjà une chose qui peut "nettoyer" les chaînes à l'aide d'une expression régulière. Au lieu d'écrire moi-même.
Outre:
Si vous pensez que le nettoyage d'une Chaîne qui pourrait être fait différemment/mieux alors je suis tout ouïe du
Un autre plus:
- Ce n'est pas seulement pour les espaces, mais pour n'importe quel genre de personnage.
- Alors, vraiment de caractères indésirables entend de tout ce qui n'est pas un a-z ou 0-9? J'ai mis à jour ma réponse, mais il est encore difficile de savoir ce qu'est un sale caractère et ce qui est propre.
Vous devez vous connecter pour publier un commentaire.
Modifié en fonction de votre mise à jour:
é
pas une lettre, alors?Si vous utilisez goyave sur votre projet (et si vous ne l'êtes pas, je crois que vous devriez en tenir compte), le CharMatcher classe gère cela très bien:
Votre premier exemple pourrait être:
pendant que votre deuxième pourrait être:
ou si vous voulez être plus flexible avec des espaces blancs (onglets, etc), vous pouvez combiner entre eux plutôt que d'écrire votre propre:
ou vous pouvez au lieu de spécifier des caractères, qui, en fonction vos besoins pourraient être:
suivie par
retainFrom(dirtyString)
comme ci-dessus.Très belle, puissante API.
Utilisation
replaceAll
.Cela fera:
et travaille en remplaçant tous les espaces avec "rien".
remplacera les caractères non-lettre avec rien.
Je préfère aussi la liste blanche-approche. Vous ne saurez jamais ce qui vient autour. Il semble y avoir plus d'encodages de caractères. De cette façon, vous pouvez tout contrôler:
Il contient tous les accents et les accents français et ... vous savez - il suffit de regarder votre clavier. Je pense que je les ai pris tous les.
Hésitez pas à omettre des caractères spéciaux comme < > pour éviter l'injection de code...