2009-09-28 9 views
14
public static String removeNonDigits(final String str) { 
    if (str == null || str.length() == 0) { 
     return ""; 
    } 
    return str.replaceAll("/[^0-9]/g", ""); 
} 

Cela devrait seulement obtenir les chiffres et retourner mais ne pas le faire comme prévu! Aucune suggestion?Remplacer tous les non chiffres par un caractère vide dans une chaîne

+0

Si vous regardez la méthode String.replaceAll, vous verrez qu'elle exécute Pattern.compile (regex) .matcher (this) .replaceAll (remplacement) ce qui est inefficace si vous le faites beaucoup. Une meilleure façon serait d'extraire le motif compilé en une constante. – kfox

Répondre

35

Java Perl :) Essayez "[^0-9]+"

+0

LOL .. Merci .. :) –

+0

@whyoz: S'il vous plaît poser une nouvelle question –

+0

@whyoz: Personne ne va jamais trouver la réponse dans un commentaire. –

15

Essayez ceci:

public static String removeNonDigits(final String str) { 
    if (str == null || str.length() == 0) { 
     return ""; 
    } 
    return str.replaceAll("\\D+", ""); 
} 
+0

Vous devez échapper à la barre oblique (pour l'amour de Java, pas la regex): "\\ D +" –

+0

Woops, \\ fixe \\ –

+0

Merci les gars .. :) –

2
public String replaceNonDigits(final String string) { 
    if (string == null || string.length() == 0) { 
     return ""; 
    } 
    return string.replaceAll("[^0-9]+", ""); 
} 

Cela fait ce que vous voulez.

1

Je recommande pour ce cas particulier d'avoir une petite boucle sur la chaîne.

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    char ch = s.charAt(i); 
    if (ch =='0' || ch == '1' || ch == '2' ...) { 
     sb.add(ch); 
    } 
} 
return sb.toString(); 
+4

Character.isDigit (...) est une meilleure option que '(ch ==' 0 '|| ch ==' 1 '|| ch ==' 2 '....)' IMO. –

3

Utilisation suivante où enumValue est la chaîne d'entrée.

enumValue.replaceAll("[^0-9]","") 

Ceci prendra la chaîne et remplacera tous les chiffres non numériques par un "".

par exemple: l'entrée est _126576, la sortie sera 126576.

Hope this helps.

Questions connexes