2014-07-09 39 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*")。

相关问题