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

Powinno się tylko uzyskać cyfry i wrócić, ale nie robić tego zgodnie z oczekiwaniami! Jakieś sugestie?Zastąp wszystkie znaki niebędące cyframi pustą literą w łańcuchu znaków

+0

Jeśli spojrzysz na metodę String.replaceAll, zobaczysz, że robi to Pattern.compile (regex) .matcher (this) .replaceAll (zamiennik), który jest nieefektywny, jeśli robisz to bardzo często. Lepszym sposobem byłoby wyodrębnienie skompilowanego wzorca w stałą. – kfox

Odpowiedz

35

Java nie jest Perl :) Spróbuj "[^0-9]+"

+0

LOL .. Dziękuję .. :) –

+0

@whyoz: Proszę zadać nowe pytanie –

+0

@whyoz: Nikt nigdy nie znajdzie odpowiedzi w komentarzu. –

15

Spróbuj tego:

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

Musisz uciec z ukośnika (ze względu na Javę, a nie na wyrażenie): "\\ D +" –

+0

Woops, \\ naprawiony \\ –

+0

Dzięki chłopaki .. :) –

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

to robi to, co chcesz.

1

Polecam do tego konkretnego przypadku, mając tylko małą pętlę na sznurku.

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 (...) jest lepszym rozwiązaniem niż "(ch == '0' || ch == '1' || ch == '2' ....) 'IMO. –

3

Stosuj poniżej, gdzie enumValue jest ciągiem wejściowym.

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

Spowoduje to wstawienie ciągu znaków i zastąpienie wszystkich cyfr bez cyfry znakiem "".

np: wejście jest _126576, wyjście będzie 126576.

Nadzieja to pomaga.

Powiązane problemy