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


Réponses:


186

Cela dépend de ce que vous voulez dire. Si vous voulez juste vous en débarrasser, faites ceci:
(Mise à jour: Apparemment, vous voulez aussi garder les chiffres, utilisez les secondes 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 considérablement améliorés en précompilant le modèle de 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 des caractères accentués en quelque chose de sensé qui reste ascii, regardez ces questions:


lorsque j'utilise cette fonction, il supprime également tous les numéros.Mais je ne veux pas que les numéros soient supprimés.Je veux simplement supprimer les caractères spéciaux.Veuillez suggérer quelque chose ..
— Tanu

eh bien tu as dit que tu voulais seulement l'alphabet. Mais je vais mettre à jour ma réponse dans une minute
— Sean Patrick Floyd

Je veux concaténer une chaîne mais avec une condition comme 1.S'il n'y a qu'un seul résultat, aucune concaténation requise 2.Si le résultat est supérieur à 1, la chaîne concatée dans l'exemple de forme suivant: stack + over + flow
— Tanu

2
@Tanu, c'est une question différente. Faites-en un nouveau
— Pekka

Que faire si je ne veux pas que les espaces soient supprimés? ou dire tous les espaces comme les tabulations, les retours à la ligne réduits comme un seul espace?
— damné

74

J'utilise ceci.

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

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

Ici

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

\ W: un caractère autre qu'un mot


Ne fonctionne pas pour <script> alert ('XSS Attack') </script>. Comment supprimer les caractères '<', '>', '\'?
— Manoj

11

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

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

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

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

5
Pour l'utilisation de l'espacereplaceAll("[^a-zA-Z0-9 ]", "");
— Qamar

5

Remplacez tous les caractères spéciaux par

replaceAll("\\your special character","new character");

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

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

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


Certainement ce que je cherchais quand j'ai vu le titre de la question "Comment remplacer des caractères spéciaux dans une chaîne?" Merci!
— Mr.Drew

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

Ici, tous les caractères spéciaux sauf l'espace, la virgule et l'esperluette sont remplacés. Vous pouvez également omettre l'espace, la virgule et l'esperluette à l'aide de 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.


2

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;
    }
}

0

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


0

Vous pouvez obtenir unicode pour ce caractère indésirable à partir de l'outil de mappage de caractères dans Windows PC et ajouter \ u par exemple \ u00a9 pour le symbole de copyright. Vous pouvez maintenant utiliser cette chaîne avec ce caractère indésirable particulier, ne supprimez aucun caractère indésirable, mais remplacez-le par le bon Unicode.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.