2010-11-26 6 views
63

J'ai une chaîne avec beaucoup de caractères spéciaux. Je veux supprimer tous ceux-ci, mais gardez les caractères alphabétiques.Comment remplacer des caractères spéciaux dans une chaîne?

Comment est-ce que je peux faire ceci?

+0

Regardez ce fil: http://stackoverflow.com/questions/3438854/replace-unicode-control-characters-existing-solution –

Répondre

146

Cela dépend de ce que vous voulez dire. Si vous voulez juste pour se débarrasser d'eux, faites ceci:
(Mise à jour: Apparemment, vous voulez garder les chiffres aussi bien, utilisez les deuxièmes lignes dans ce cas)

String alphaOnly = input.replaceAll("[^a-zA-Z]+",""); 
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+",""); 

ou l'équivalent:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+",""); 
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+",""); 

(Tous ces éléments peuvent être significativement améliorée par la précompilation expression rationnelle et le stocker dans une constante)

Or, avec Guava:

private static final CharMatcher ALNUM = 
    CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')) 
    .or(CharMatcher.inRange('0', '9')).precomputed(); 
// ... 
String alphaAndDigits = ALNUM.retainFrom(input); 

Mais si vous voulez transformer des caractères accentués en quelque chose de sensible qui est encore ascii, regardez ces questions:

+0

Merci Floydit cela fonctionne très bien, mais un problème est là – Tanu

+0

lorsque j'utilise cette fonction il enlève tous les nombres aussi bien. mais je ne veux pas les nombres pour enlever. juste vouloir enlever les caractères spéciaux. svp suggérer quelque chose .. – Tanu

+0

bien vous avez dit que vous vouliez seulement l'alphabet. Mais je vais mettre à jour ma réponse dans une minute –

0

Vous pouvez utiliser des expressions régulières de base sur les chaînes pour trouver tous les caractères spéciaux ou utiliser des classes pattern et matcher pour rechercher/modifier/supprimer des chaînes définies par l'utilisateur. Ce lien a quelques exemples simples et faciles à comprendre pour les expressions régulières: http://www.vogella.de/articles/JavaRegularExpressions/article.html

55

J'utilise ceci.

s = s.replaceAll("\\W", ""); 

Il remplace tous les caractères spéciaux de la chaîne.

Ici

\ w: Un caractère mot, abréviation de [a-zA-z_0-9]

\ W: Un caractère non-mot

+4

C'est bon mais aussi supprime les espaces. –

+3

Que faire si je ne veux pas supprimer de l'espace –

+0

Ne fonctionne pas pour l'alerte . Comment supprimer '<', '>', caractères '\'? – Manoj

0

Vous pouvez obtenir unicode pour cette ordure caractère de l'outil charactermap dans la fenêtre pc et ajoutez \ u exemple \ u00a9 pour le symbole de copyright. Maintenant, vous pouvez utiliser cette chaîne avec ce caprice particulier, ne supprimez pas de caractère indésirable, mais remplacer par unicode approprié.

4

Vous pouvez utiliser la méthode suivante pour conserver les caractères alphanumériques.

replaceAll("[^a-zA-Z0-9]", ""); 

Et si vous voulez conserver uniquement des caractères alphabétiques utiliser cette

replaceAll("[^a-zA-Z]", ""); 
+0

supprime aussi des espaces – Jasper

+0

Pour l'espace utiliser 'remplacerAll (" [^ a-zA-Z0-9] "," ");' – Qamar

1
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", ""); 

Ici tous les caractères spéciaux, sauf l'espace, virgule, et esperluette sont remplacés. Vous pouvez également omettre l'espace, la virgule et l'esperluette par l'expression régulière suivante.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", ""); 

Où Input est la chaîne dont nous avons besoin pour remplacer les caractères.

Questions connexes