110 votes

Comment remplacer les caractères spéciaux dans une chaîne de caractères ?

J'ai une chaîne de caractères avec beaucoup de caractères spéciaux. Je veux tous les supprimer, mais garder les caractères alphabétiques.

Comment puis-je faire cela ?

0 votes

207voto

Sean Patrick Floyd Points 109428

Cela dépend de ce que vous voulez dire. Si vous voulez simplement vous en débarrasser, faites ceci :
(Mise à jour : Apparemment, vous voulez également conserver les chiffres, utilisez alors 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 peuvent être grandement améliorés en précompilant le motif regex et en le stockant dans une constante)

Ou, 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 les caractères accentués en quelque chose de sensé qui soit toujours en ascii, regardez ces questions :

0 votes

Lorsque j'utilise cette fonction, elle supprime tous les chiffres aussi. mais je ne veux pas que les chiffres soient supprimés. Je veux juste supprimer les caractères spéciaux. Veuillez suggérer quelque chose..

0 votes

Bien tu as dit que tu voulais seulement l'alphabet. Mais je vais mettre à jour ma réponse dans une minute

0 votes

Je veux concaténer des chaînes mais avec une condition comme 1. S'il n'y a qu'un seul résultat, aucune concaténation n'est requise 2. Si le résultat est plus grand que 1 alors concaténer la chaîne sous la forme suivante par exemple : stack+over+flow

83voto

Dhiral Pandya Points 1987

Je l'utilise.

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

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

Ici

\w : Un caractère alphabétique, équivalent à [a-zA-Z_0-9]

\W : Un caractère non alphabétique

0 votes

Ne fonctionne pas pour alert('Attaque XSS'). Comment supprimer les caractères '<', '>', '\' ?

15voto

dhuma1981 Points 378

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

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

Et si vous voulez ne conserver que les caractères alphabétiques, utilisez ceci

remplacerTout("[^a-zA-Z]", "");

6 votes

Pour l'espace, utilisez replaceAll("[^a-zA-Z0-9 ]", "");

8voto

krishna murthy Points 461

Remplacez tous les caractères spéciaux par

replaceAll("\\votre caractère spécial","nouveau caractère");

ex: pour remplacer toutes les occurrences de * par un espace blanc

replaceAll("\\*","");

*cette instruction ne peut remplacer qu'un type de caractère spécial à la fois

0 votes

Certainement ce que je cherchais lorsque j'ai vu le titre de la question "Comment remplacer les caractères spéciaux dans une chaîne de caractères?" merci!

7voto

Lucas Malor Points 922

En suivant l'exemple de la réponse d'Andrzej Doyle, je pense que la meilleure solution est d'utiliser org.apache.commons.lang3.StringUtils.stripAccents():

package bla.bla.utility;

import org.apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X