97 votes

Comment supprimer les caractères spéciaux d'une chaîne de caractères ?

Je veux supprimer les caractères spéciaux suivants :

- + ^ . : ,

d'une chaîne de caractères en utilisant Java.

268voto

Thomas Points 35713

Cela dépend de ce que vous définissez comme caractères spéciaux, mais essayez replaceAll(...):

String result = yourString.replaceAll("[-+.^:,]","");

Notez que le caractère ^ ne doit pas être le premier de la liste, car vous devriez alors soit l'échapper, soit cela signifierait "tout sauf ces caractères".

Autre remarque : le caractère - doit être le premier ou le dernier de la liste, sinon vous devriez l'échapper ou cela définirait une plage (par exemple :-, signifierait "tous les caractères de la plage : à ,).

Donc, pour maintenir la cohérence et ne pas dépendre du positionnement des caractères, vous voudrez peut-être échapper tous ces caractères qui ont une signification particulière dans les expressions régulières (la liste suivante n'est pas exhaustive, alors soyez conscient d'autres caractères comme (, {, $, etc.):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");

Si vous souhaitez vous débarrasser de toute ponctuation et de tout symbole, essayez cette expression régulière : \p{P}\p{S} (gardez à l'esprit que dans les chaînes Java, vous devrez échapper les barres obliques : "\\p{P}\\p{S}").

Une troisième façon pourrait être quelque chose comme ceci, si vous pouvez définir exactement ce qu'il doit rester dans votre chaîne :

String result = yourString.replaceAll("[^\\w\\s]","");

Cela signifie : remplacer tout ce qui n'est pas un caractère alphabétique (a-z en tout cas, 0-9 ou _) ou un espace.

Édition : veuillez noter qu'il existe quelques autres modèles qui pourraient s'avérer utiles. Cependant, je ne peux pas tous les expliquer, alors consultez la section de référence de regular-expressions.info.

Voici une alternative moins restrictive à l'approche "définir les caractères autorisés", comme suggéré par Ray :

String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");

L'expression régulière correspond à tout ce qui n'est pas une lettre dans n'importe quelle langue et pas un séparateur (espace, saut de ligne, etc.). Notez que vous ne pouvez pas utiliser [\P{L}\P{Z}] (P en majuscule signifie ne pas avoir cette propriété), car cela signifierait "tout ce qui n'est pas une lettre ou pas un espace", ce qui correspond à presque tout, car les lettres ne sont pas des espaces et vice versa.

Informations supplémentaires sur Unicode

Certains caractères unicode semblent poser problème en raison des différentes façons possibles de les encoder (en tant que point de code unique ou une combinaison de points de code). Veuillez consulter regular-expressions.info pour plus d'informations.

46voto

Stephen Points 188

Cela remplacera tous les caractères sauf alphanumériques

remplacerTout("[^A-Za-z0-9]","");

18voto

O'one Points 1670

Tel que décrit ici http://developer.android.com/reference/java/util/regex/Pattern.html

Les modèles sont des expressions régulières compilées. Dans de nombreux cas, les méthodes de commodité telles que String.matches, String.replaceAll et String.split seront préférables, mais si vous avez besoin de travailler beaucoup avec la même expression régulière, il peut être plus efficace de la compiler une fois et de la réutiliser. La classe Pattern et son compagnon, Matcher, offrent également plus de fonctionnalités que le petit montant exposé par String.

public class RegularExpressionTest {

public static void main(String[] args) {
    System.out.println("La chaîne est = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
    System.out.println("Le numéro est = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}

 public static String getOnlyDigits(String s) {
    Pattern pattern = Pattern.compile("[^0-9]");
    Matcher matcher = pattern.matcher(s);
    String number = matcher.replaceAll("");
    return number;
 }
 public static String getOnlyStrings(String s) {
    Pattern pattern = Pattern.compile("[^a-z A-Z]");
    Matcher matcher = pattern.matcher(s);
    String number = matcher.replaceAll("");
    return number;
 }
}

Résultat

La chaîne est = one
Le numéro est = 9196390097

15voto

omt66 Points 527

Essayez la méthode replaceAll() de la classe String.

BTW voici la méthode, le type de retour et les paramètres.

public String replaceAll(String regex,
                         String replacement)

Exemple:

String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");

Cela devrait supprimer tous les caractères {'^', '+', '-'} que vous vouliez supprimer!

7voto

Akila Points 340

Supprimer les caractères spéciaux

Chaîne t2 = "!@#$%^&*()-';,./?><+abdd";

t2 = t2.replaceAll("\\W+","");

La sortie sera : abdd.

Cela fonctionne parfaitement.

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