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

これは数字だけを取得して戻ってきますが、期待どおりに実行してはいけません。助言がありますか?すべての非数字を文字列の空の文字に置き換えます。

+0

String.replaceAllメソッドを見ると、Pattern.compile(regex).matcher(this).replaceAll(replacement)が実行されていることがわかります。これは多くの場合、非効率的です。より良い方法は、コンパイルされたパターンを定数に抽出することです。 – kfox

答えて

35

のJavaは、Perlではありません:)このお試しください"[^0-9]+"

+0

LOL ..ありがとう.. :) –

+0

@whyoz:新しい質問をしてください –

+0

@whyoz:誰もコメントで答えを見つけるつもりはありません。 –

15

をお試しください:これは何をしたいん

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

"\\ D +" –

+0

スラッシュ(Javaのために正規表現ではない)をエスケープする必要があります:\\固定\\ –

+0

ありがとうございます.. :) –

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

を。

1

文字列の上に小さなループを置くだけで、この特定のケースをお勧めします。

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(...)は、 '(ch ==' 0 '|| ch ==' 1 '|| ch ==' 2 '....)'よりも優れたオプションです。 –

3

enumValueが入力文字列である場合、次のように使用してください。

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

これは文字列を取り、すべての非数字桁を ""で置き換えます。

例:入力が_126576で、出力は126576.

は、この情報がお役に立てば幸いです。

関連する問題