Remplacement de tous les caractères non alphanumériques par des chaînes vides
J'ai essayé d'utiliser ceci mais n'a pas fonctionné -
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
11 réponses
Utilisez [^A-Za-z0-9]
.
Note: suppression de l'espace car ce n'est généralement pas considéré comme alphanumérique.
Essayez
return value.replaceAll("[^A-Za-z0-9]", "");
Ou
return value.replaceAll("[\\W]|_", "");
return value.replaceAll("[^A-Za-z0-9 ]", "");
Cela laissera les espaces intacts. Je suppose que c'est ce que vous voulez. Sinon, supprimez l'espace de l'expression rationnelle.
Vous devez savoir que [^a-zA-Z]
remplacera les caractères qui ne sont pas eux-mêmes dans la plage de caractères A-Z/A-Z. Cela signifie des caractères spéciaux comme é
, ß
etc. ou caractères cyrilliques et tels seront supprimés.
Si le remplacement de ces caractères n'est pas souhaité, utilisez plutôt des classes de caractères prédéfinies:
someString.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "");
PS: \p{Alnum}
n'atteint pas cet effet, il agit de la même manière que [A-Za-z0-9]
.
Vous pouvez également essayer cette expression rationnelle plus simple:
str = str.replaceAll("\\P{Alnum}", "");
Les expressions régulières de Java ne nécessitent pas de mettre une barre oblique (/
) ou tout autre délimiteur autour de l'expression rationnelle, par opposition à D'autres langages comme Perl, par exemple.
J'ai fait cette méthode pour créer des noms de fichiers:
public static String safeChar(String input)
{
char[] allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
char[] charArray = input.toString().toCharArray();
StringBuilder result = new StringBuilder();
for (char c : charArray)
{
for (char a : allowed)
{
if(c==a) result.append(a);
}
}
return result.toString();
}
Méthode Simple:
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public String normalizeOnlyLettersNumbers(String str) {
if (!isBlank(str)) {
return str.replaceAll("[^\\p{L}\\p{Nd}]+", "");
} else {
return "";
}
}
public static void main(String[] args) {
String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";
System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));
}
Sortie: ChlamydiasppIgGIgMIgAAbs8006
Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java
Si vous souhaitez également autoriser les caractères alphanumériques qui n'appartiennent pas au jeu de caractères ascii, comme par exemple les umlaut allemands, vous pouvez envisager d'utiliser la solution suivante:
String value = "your value";
// this could be placed as a static final constant, so the compiling is only done once
Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);
value = pattern.matcher(value).replaceAll("");
Veuillez noter que L'utilisation de L'indicateur UNICODE_CHARACTER_CLASS pourrait avoir une pénalité de performance (voir javadoc de cet indicateur)
En utilisant la goyave, vous pouvez facilement combiner différents types de critères. Pour votre solution spécifique, vous pouvez utiliser:
value = CharMatcher.inRange('0', '9')
.or(CharMatcher.inRange('a', 'z')
.or(CharMatcher.inRange('A', 'Z'))).retainFrom(value)