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

Questo dovrebbe solo ottenere le cifre e tornare ma non farlo come previsto! Eventuali suggerimenti?Sostituisci tutte le non cifre con un carattere vuoto in una stringa

+0

Se si osserva il metodo String.replaceAll, si vedrà che sta facendo Pattern.compile (regex) .matcher (this) .replaceAll (replacement) che è inefficiente se lo si fa molto. Un modo migliore sarebbe quello di estrarre il modello compilato in una costante. – kfox

risposta

35

Java non è Perl :) Prova "[^0-9]+"

+0

LOL .. Grazie .. :) –

+0

@whyoz: Si prega di fare una nuova domanda –

+0

@whyoz: Nessuno troverà mai la risposta in un commento. –

15

Prova questa:

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

È necessario sfuggire alla barra (per l'amor di Java, non la regex): "\\ D +" –

+0

Woops, \\ fixed \\ –

+0

Grazie ragazzi .. :) –

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

Questo non fa ciò che si vuole.

1

Suggerirei per questo caso particolare di avere un piccolo anello sopra la corda.

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 (...) è un'opzione migliore di '(ch ==' 0 '|| ch ==' 1 '|| ch ==' 2 '....)' IMO. –

3

Utilizzare seguendo dove enumValue è la stringa di input.

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

Questo prenderà la stringa e sostituirà tutte le cifre non numeriche con un "".

esempio: input è _126576, l'uscita sarà 126576.

Spero che questo aiuti.

Problemi correlati