java正则表达式判断数值

我需要判断一个字符串是否是数值,包括整数和浮点数,如
"0.0" true
"-0.0" true
"00.1" false (特别是这种情况,特别麻烦)
"-0.01" true
"1.1.0" false
"0" true
"-0" true
当然,如果有其他好的方法实现目的也可以。

^(-?[1-9]\\d*\\.?\\d*)|(-?0\\.\\d*[1-9])|(-?[0])|(-?[0]\\.\\d*)$追问

"-0."
这种情况没通过……

追答

^(-?[1-9]\\d*)|(-?[1-9]\\d*\\.\\d+)|(-?0\\.\\d*[1-9])|(-?[0])|(-?[0]\\.\\d+)$

追问

嗯,应该可以了,能够说一下每一项判断的是什么么?最后一项我不太明白

追答

^(-?[1-9]\\d*)|(-?[1-9]\\d*\\.\\d+)|(-?0\\.\\d*[1-9])|(-?[0])|(-?[0]\\.\\d+)$
其中
^表示匹配起始,$表示匹配结束,|表示或者的关系
(-?[1-9]\\d*)前面的-?表示可以有0个或1个负号-,[1-9]表示1到9的数字,\\d表示所有数字也就是0-9,*表示前面的\\d出现0到任意次数,这一段就是表示不带小数点的数字
(-?[1-9]\\d*\\.\\d+)表示带小数点的数字,并且如果出现小数点,则后面的\\d+表示起码要有1位数字
(-?0\\.\\d*[1-9])表示小数点前面是0的数字
(-?[0])表示0或-0
(-?[0]\\.\\d+)表示小数点前面是0或-0,小数点后面起码有1位数字

请采纳。

追问

我是想问第三项和第五项有什么区别?我怎么觉得重复了……

追答

第三项,(-?0\\.\\d*[1-9])表示小数点前面是0或-0的数字,最后1位不能是0
第五项,(-?[0]\\.\\d+)表示小数点前面是0或-0,小数点后面起码有1位数字,最后一位可以是0-9
其实可以根据你的具体要求自己灵活合并的

温馨提示:答案为网友推荐,仅供参考
相似回答