Vous savez apparemment déjà ce qu'est une expression régulière en fonction de la façon dont vous avez tagué votre question. Avez-vous essayé de lire la documentation de la Stringclasse? En particulier, recherchez le mot «regex»; il y a quelques méthodes, et un peu de réflexion devrait vous dire comment procéder ... :)
Karl Knechtel
3
L'expression «caractère spécial» est tellement surutilisée qu'elle n'a presque aucun sens. Si ce que vous voulez dire est, "J'ai cette liste de caractères spécifiques que je veux supprimer", alors faites comme Thomas le suggère et formez votre modèle avec une classe de caractères regex et replaceAlleux. Si vous avez des exigences plus ésotériques, modifiez la question. :)
Ray Toal
1
ce ne sont pas des caractères spéciaux ... ce sont: äâêíìéè car ce ne sont pas vos types de caractères courants à 1 octet comme - + ^ sont ... de toute façon, comme Ray l'a dit, faites un replaceAllpour 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.
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.
+1 pour la meilleure solution polyvalente. Puisque vous énumérez quelques variations en l'absence de détails de l'OP, vous pourriez aussi bien montrer et expliquer des modèles tels que[\P{L}]
Ray Toal
Notez également que le -caractère doit être le premier ou le dernier de la liste ou il doit être échappé.
kapex le
[^\\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
Peter
@Peter ça n'élimine pas ces caractères dans mes tests. Il peut y avoir un autre problème dans votre cas, par exemple un encodage différent du texte. Je vais ajouter un lien vers plus d'informations.
Thomas
1
@Thomas String result = yourString.replaceAll("[^\w\s]","");fait une erreurInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Visruth
40
Cela remplacera tous les caractères sauf alphanumériques
Les modèles sont des expressions régulières compilées. Dans de nombreux cas, des méthodes pratiques telles que String.matches, String.replaceAllet String.splitseront 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.
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 ... :)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 iciRé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.
la source
[\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% correctString 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]","");
la source
Comme décrit ici http://developer.android.com/reference/java/util/regex/Pattern.html
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
la source
Essayez la
replaceAll()
méthode de laString
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!
la source
Pour supprimer un caractère spécial
String t2 = "!@#$%^&*()-';,./?><+abdd"; t2 = t2.replaceAll("\\W+","");
La sortie sera:
abdd.
Cela fonctionne parfaitement.
la source
Utilisez la
String.replaceAll()
méthode en Java. replaceAll devrait être assez bon pour votre problème.la source
Vous pouvez supprimer un seul caractère comme suit:
String str="+919595354336"; String result = str.replaceAll("\\\\+",""); System.out.println(result);
PRODUCTION:
919595354336
la source
Si vous voulez juste faire un remplacement littéral en java, utilisez
Pattern.quote(string)
pour échapper n'importe quelle chaîne à un littéral.la source