2013-05-31 145 views

回答

10

您可以使用正則表達式:yourString.matches("\\d+")

\\d意味着一個數字0-9,+意味着一個或多個,並結合\\d+等於一個或多個數字:)

+0

非常感謝你 – Ted

+0

歡迎您:) – Pshemo

4

使用正則表達式:

string.matches("\\d*"); 

"\d*"裝置 「A位(0-9)零或更多次」。或者,您可以將「*」替換爲「+」以表示「一次或多次」。

+0

謝謝你的解釋,也是 – Ted

1

您可以遍歷字符串並檢查每個字符(如果性能是考慮,可能比使用正則表達式更有效)。

boolean isAllDigit(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     if (s.charAt(i) < '0' || s.charAt(i) > '9') { 
     return false; 
     } 
    } 

    return true; 
} 
+1

對不起如果我看起來很煩人,但是如何正則表達式更慢然後遍歷所有它呢?我是一個初學者,只是問它背後的理論 – Ted

+1

我不確定在Java中如何實現正則表達式,但通常的做法是將正則表達式編譯爲有限自動機,然後運行自動機在字符串看它是否匹配。在這種情況下,自動機非常簡單。但是,無論哪種情況,您都會迭代整個字符串。所以,使用正則表達式的代價大概是:'build automata'+'iterate'。上面的代碼的代價只是'迭代'。所以,如果你有200億字符串,上面的代碼會更快。 – npr

+0

如果你只有一個非常長的字符串,我認爲這不會有什麼不同,因爲不管字符串的長度如何,只建立一次自動機,它的大小由正則表達式決定。 – npr

1

爲什麼不把它放在try/catch中呢?

String number="a123.2"; 
    try { 
     Double.parseDouble(number); 
     System.out.println("It's a number"); 
    } catch (Exception e) { 
     System.out.println("This is not a number!"); 
    } 
3

org.apache.commons.lang.StringUtils.isNumeric(String)驗證輸入字符串中的所有字符都是數字。

它的實現(如果你不希望第三方的依賴也):

int sz = str.length(); 
    for (int i = 0; i < sz; i++) { 
     if (Character.isDigit(str.charAt(i)) == false) { 
      return false; 
     } 
    } 
    return true; 
相關問題