Je souhaite supprimer des caractères spéciaux comme:
- + ^ . : ,
à partir d'une chaîne utilisant Java.
Je souhaite supprimer des caractères spéciaux comme:
- + ^ . : ,
à partir d'une chaîne utilisant Java.
replaceAll
eux. Si vous avez des exigences plus ésotériques, modifiez la question. :)
replaceAll
pour eux, ou faites une analyse sur la chaîne, ajoutez les caractères qui ne sont pas les caractères que vous voulez retirer à une autre chaîne et à la fin, faites simplement un + = à une chaîne que vous retournerez.
deleteChars.apply( fromString, "-+^.:," );
- trouver deleteChars ici
Réponses:
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 note: le -
caractère doit être le premier ou le dernier de la liste, sinon vous devrez l'échapper ou il définirait une plage (par exemple, :-,
cela signifierait "tous les caractères de la plage :
à ,
).
Ainsi, afin de maintenir la cohérence et ne pas dépendre de positionnement de caractère, vous voudrez peut - être échapper à tous ces personnages qui ont une signification particulière dans les expressions régulières (la liste suivante est incomplète, alors soyez au courant d'autres personnages comme (
, {
, $
etc.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Si vous voulez vous débarrasser de tous les signes de ponctuation et symboles, essayez cette expression régulière: \p{P}\p{S}
(gardez à l'esprit que dans les chaînes Java, vous devrez éviter les barres obliques inverses :) "\\p{P}\\p{S}"
.
Une troisième manière pourrait être quelque chose comme 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 de mot (az dans tous les cas, 0-9 ou _) ou des espaces.
Edit: veuillez noter qu'il existe quelques autres modèles qui pourraient s'avérer utiles. Cependant, je ne peux pas tous les expliquer, alors jetez un œil à 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}]","");
Le regex correspond à tout ce qui n'est pas une lettre dans aucune langue et pas un séparateur (espace, saut 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 pas une lettre ou pas un espace», ce qui correspond presque à tout, puisque les lettres ne sont pas des espaces et vice versa.
Informations supplémentaires sur Unicode
Certains caractères Unicode semblent poser des problèmes en raison de différentes manières possibles de les coder (comme un point de code unique ou une combinaison de points de code). Veuillez consulter regular-expressions.info pour plus d'informations.
[\P{L}]
-
caractère doit être le premier ou le dernier de la liste ou il doit être échappé.
[^\\p{L}\\p{Z}]
semble également éliminer les trémas allemands (ä, ö, ü) (du moins pour moi: /), donc "La regex correspond à tout ce qui n'est une lettre dans aucune langue" ne semble pas être 100% correct
String result = yourString.replaceAll("[^\w\s]","");
fait une erreurInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Cela remplacera tous les caractères sauf alphanumériques
replaceAll("[^A-Za-z0-9]","");
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
etString.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 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
Essayez la replaceAll()
méthode de la String
classe.
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!
Pour supprimer un caractère spécial
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
La sortie sera: abdd.
Cela fonctionne parfaitement.
Utilisez la String.replaceAll()
méthode en Java.
replaceAll devrait être assez bon pour votre problème.
String
classe? En particulier, recherchez le mot «regex»; il y a quelques méthodes, et un peu de réflexion devrait vous dire comment procéder ... :)