使用正则表达式
表示数值的字符串
http://www.nowcoder.com/questionTerminal/e69148f8528c4039ad89bb2546fd4ff8
import java.util.regex.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ public boolean isNumeric (String str) { // write code here if(str==null || str.length()==0){ return false; } //不带eE允许前置空,eg:-.1415926,不允许前置0,eg:+03.1415 //应该允许eg:-.123(相当于-0.123) -123.(相当于-123.0) 但不允许(-.或+.或-+) String regex1 = "([-+]{0,1}[1-9]{1}\\d*(\\.\\d*)?)|([-+]{0,1}(0((\\.\\d*)?)|((\\.\\d+){1})))|(([-+]{0,1})(\\.\\d+){1})"; //带eE前面不能出现小数点前为0或空,eg:-0.45e+3,-.45e+3都是不对的 String regex2 = "^[-+]{0,1}[1-9]{1}\\d*(\\.\\d+)?([eE]{1}[-+]{0,1}[1-9]{1}\\d*)?$"; return Pattern.matches(regex1,str) || Pattern.matches(regex2,str); } }
可能还有没考虑到的,欢迎补充。
测试正常的有:-0,-0.123,-.123,-123.,-0.,-.0等都允许出现
不允许
0123,前置0
-.,正负号后直接小数点
-0.45e+3,小数后+e
45e+3.,e后有小数