J'ai une chaîne de caractères avec beaucoup de caractères spéciaux. Je veux tous les supprimer, mais garder les caractères alphabétiques.
Comment puis-je faire cela ?
J'ai une chaîne de caractères avec beaucoup de caractères spéciaux. Je veux tous les supprimer, mais garder les caractères alphabétiques.
Comment puis-je faire cela ?
Cela dépend de ce que vous voulez dire. Si vous voulez simplement vous en débarrasser, faites ceci :
(Mise à jour : Apparemment, vous voulez également conserver les chiffres, utilisez alors les deuxièmes 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 peuvent être grandement améliorés en précompilant le motif 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 les caractères accentués en quelque chose de sensé qui soit toujours en ascii, regardez ces questions :
Lorsque j'utilise cette fonction, elle supprime tous les chiffres aussi. mais je ne veux pas que les chiffres soient supprimés. Je veux juste supprimer les caractères spéciaux. Veuillez suggérer quelque chose..
Bien tu as dit que tu voulais seulement l'alphabet. Mais je vais mettre à jour ma réponse dans une minute
Je veux concaténer des chaînes mais avec une condition comme 1. S'il n'y a qu'un seul résultat, aucune concaténation n'est requise 2. Si le résultat est plus grand que 1 alors concaténer la chaîne sous la forme suivante par exemple : stack+over+flow
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;
}
}
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.
0 votes
Regardez ce fil : stackoverflow.com/questions/3438854/…