2014-07-09 78 views
0

我想檢查字符串是否爲正自然數,但我不想使用Integer.parseInt(),因爲用戶可能輸入大於int的數字。相反,如果數字字符串包含全部「0」字符,我寧願使用正則表達式來返回false。用於檢查字符串是否爲正數的正則表達式

if(val.matches("[0-9]+")){ 
    // We know that it will be a number, but what if it is "000"? 
    // what should I change to make sure 
    // "At Least 1 character in the String is from 1-9" 
} 

注:該字符串必須只包含0 - 9,它必須不包含所有0秒;換句話說,它必須在[1-9]中至少有1個字符。

+1

你能澄清你的意思是「正數」嗎? 2.5是一個正數嗎?那麼'π'呢? –

+0

更新 - >正自然數 – Tum

回答

6

如果您嘗試使用任意大的整數,則最好使用BigInteger,但以下模式應匹配包含至少一個非零字符的一系列數字。

\d*[1-9]\d* 

Regular expression visualization

Debuggex Demo

Debugex的單元測試似乎有點馬車,但你可以與圖案有玩。它很簡單,它應該是合理的跨語言兼容的,但在Java中你需要逃避它。

Pattern positiveNumber = Pattern.compile("\\d*[1-9]\\d*"); 

注意上面的(故意)相匹配的字符串,我們一般不會考慮「積極的自然數」,作爲一個有效的字符串可以與一個或多個0 S,例如啓動000123。如果你不想匹配這樣的字符串,你可以進一步簡化模式。

[1-9]\d*  

Regular expression visualization

Debuggex Demo

Pattern exactPositiveNumber = Pattern.compile("[1-9]\\d*"); 
+0

我需要「\\」嗎? – Tum

+0

這是否適用於「0」? –

+0

@AlexandreSantos這個正則表達式拒絕「0」,所以它的工作原理。 –

2

如果你想匹配的正自然數,寫在標準的方式,沒有前導零,您想要的正則表達式

[1-9]\d* 

它匹配任何字符串consis只有數字,其中第一個數字不是零。如果將它寫爲Java String文字,請不要忘記加倍反斜槓("[1-9]\\d*")。

相關問題