web-dev-qa-db-fra.com

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

Je veux supprimer des caractères spéciaux comme:

- + ^ . : ,

à partir d'une chaîne utilisant Java.

70
Sameek Mishra

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 devrez alors l'échapper ou cela signifierait "tout sauf ces caractères".

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

Par conséquent, afin de préserver la cohérence et de ne pas dépendre du positionnement des caractères, vous souhaiterez peut-être échapper à tous les caractères ayant une signification spéciale dans les expressions régulières (la liste suivante n'est pas complète, aussi soyez conscient des autres caractères tels que ( , {, $ etc.):

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


Si vous souhaitez vous débarrasser de la ponctuation et des symboles, essayez cette expression rationnelle: \p{P}\p{S} (n'oubliez pas que dans les chaînes Java, vous devez échapper aux barres obliques: "\\p{P}\\p{S}").

Une troisième façon pourrait ressembler à ceci, si vous pouvez définir exactement ce qui doit rester dans votre chaîne:

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

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

Edit: s'il vous plaît noter qu'il existe un couple d'autres modèles qui pourraient s'avérer utiles. Cependant, je ne peux pas les expliquer tous, alors jetez un coup d'œil à la section référence de regular-expressions.info .

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

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

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

Informations complémentaires sur Unicode

Certains caractères unicode semblent poser des problèmes en raison de différentes manières de les coder (en tant que point de code unique ou combinaison de points de code). Veuillez vous référer à regular-expressions.info pour plus d'informations.

224
Thomas

Comme 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, des méthodes pratiques telles que String.matches, String.replaceAll et String.split seront préférables, mais si vous devez effectuer beaucoup de travail 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 la petite quantité exposée par String.

public class RegularExpressionTest {

public static void main(String[] args) {
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
    System.out.println("Number is = "+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

String is = one
Number is = 9196390097
16
turbandroid

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("[-+^]*", "");

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

14
omt66

Ceci remplacera tous les caractères sauf alphanumériques 

replaceAll("[^A-Za-z0-9]","");
10
Stephen

Supprimer le caractère spécial

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

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

La sortie sera: abdd.

Cela fonctionne parfaitement.

3
Akila

Utilisez la méthode String.replaceAll() en Java. replaceAll devrait suffire à résoudre votre problème.

2
MT.

Vous pouvez supprimer un seul caractère comme suit:

String str="+919595354336";

 String result = str.replaceAll("\\\\+","");

 System.out.println(result);

SORTIE:

919595354336
1
Satya

Si vous souhaitez simplement remplacer littéralement en Java, utilisez Pattern.quote(string) pour échapper une chaîne en un littéral.

myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
0
Tezra