web-dev-qa-db-fra.com

Remplacement de tous les caractères non alphanumériques par des chaînes vides

J'ai essayé d'utiliser ça mais ça n'a pas marché-

return value.replaceAll("/[^A-Za-z0-9 ]/", "");
182
Alex Gomes

Utilisez [^A-Za-z0-9].

Remarque: Supprimez l’espace car il n’est généralement pas considéré comme alphanumérique.

229
Mirek Pluta

Essayer

return value.replaceAll("[^A-Za-z0-9]", "");

ou

return value.replaceAll("[\\W]|_", "");
120
Andrew Duffy

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 que des caractères spéciaux tels que é, ß etc. ou des caractères cyrilliques 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].

56
Andre Steingress
return value.replaceAll("[^A-Za-z0-9 ]", "");

Cela va laisser espaces intacts. Je suppose que c'est ce que tu veux. Sinon, supprimez l'espace de la regex.

48
erickson

Vous pouvez aussi essayer cette expression rationnelle plus simple:

 str = str.replaceAll("\\P{Alnum}", "");
21
saurav

Les expressions régulières de Java ne vous obligent pas à insérer une barre oblique (/) ou tout autre délimiteur autour de la regex, contrairement à d'autres langages tels que Perl, par exemple.

10
abyx

J'ai créé 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();
}
8
zneo

Solution:

value.replaceAll("[^A-Za-z0-9]", "")

Explication:

[^abc] Lorsqu'un caret ^ apparaît en tant que 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 en ce qui concerne 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 substituera tous les caractères NON inclus dans le motif

5
GalloCedrone

En utilisant Guava, 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)
1
Debmalya Biswas

Si vous souhaitez également autoriser les caractères alphanumériques qui n'appartiennent pas au jeu de caractères ascii, comme par exemple ceux du tréma allemand, 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 du drapeau UNICODE_CHARACTER_CLASS pourrait avoir une incidence sur la pénalité de performance (voir javadoc de ce drapeau).

1
snap

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 "";
    }
}
1
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

1
Albin