J'ai essayé d'utiliser ça mais je n'ai pas travaillé-
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
J'ai essayé d'utiliser ça mais je n'ai pas travaillé-
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
Réponses:
Utilisez [^A-Za-z0-9]
.
Remarque: supprimé l'espace car cela n'est généralement pas considéré comme alphanumérique.
Essayer
return value.replaceAll("[^A-Za-z0-9]", "");
ou
return value.replaceAll("[\\W]|_", "");
return value.replaceAll("\\W", "");
Vous devez savoir que [^a-zA-Z]
remplacera les caractères qui ne sont pas eux-mêmes dans la plage de caractères AZ / az. Cela signifie des caractères spéciaux comme é
,ß
etc. ou les caractères cyrilliques et ceux-ci 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:
str.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]
.
[^\\p{IsAlphabetic}\\p{IsDigit}]
fonctionne bien.
{IsDigit}
ne fonctionne pas pour moi et {Digit}
c'est parce que j'essaye ceci sur Android. Et Android est UNICODE_CHARACTER_CLASS
activé par défaut. Merci pour le dégagement.
Vous pouvez également essayer cette expression rationnelle plus simple:
str = str.replaceAll("\\P{Alnum}", "");
str.replaceAll("[^\\p{Alnum}\\s]", "")
\\p{Alnum}\\p{Space}
.
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();
}
value.replaceAll("[^A-Za-z0-9]", "")
[^abc]
Lorsqu'un signe d'insertion^
apparaît comme premier caractère entre crochets, il annule le motif. Ce modèle correspond à n'importe quel caractère sauf a ou b ou c.
En regardant le mot-clé comme deux fonctions:
[(Pattern)] = match(Pattern)
[^(Pattern)] = notMatch(Pattern)
De plus concernant un motif:
A-Z = all characters included from A to Z
a-z = all characters included from a to z
0=9 = all characters included from 0 to 9
Par conséquent, il remplacera tous les caractères NON inclus dans le modèle
Si vous souhaitez également autoriser les caractères alphanumériques qui n'appartiennent pas au jeu de caractères ascii, comme par exemple les trémas 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 incidence sur la pénalité de performance (voir javadoc de cet indicateur)
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
CharMatcher de Guava fournit une solution concise:
output = CharMatcher.javaLetterOrDigit().retainFrom(input);