A[.B][e|EC], .123代表0.123
123.45e+6,A=123,B=45,C=+6;
先扫描0-9的部分,然后遇到.就是B的部分,遇到-或者+就是C的部分
public class Solution {
private int index=0;
public boolean isNumeric(char[] str){
if(str.length<1) return false;
boolean flag=scanInteger(str);
if(index<str.length&&str[index]=='.'){
index++;
flag=scanUnsignedInteger(str)||flag;
}
if(index<str.length&&(str[index]=='E'||str[index]=='e')){
index++;
flag=flag&&scanInteger(str);
}
return flag&&index==str.length;
}
private boolean scanInteger(char[] str)
{
//整数开头可能有+和-
if(index<str.length&&(str[index]=='+'||str[index]=='-'))
index ++;
return scanUnsignedInteger(str);
}
private boolean scanUnsignedInteger(char[] str){
int start=index;
while(index<str.length && str[index]>='0' && str[index]<='9')
index++;
return start<index;//是否存在整数
}
}
2、正则表达式
[] : 字符集合
() : 分组
? : 重复 0 ~ 1 次
+ : 重复 1 ~ n 次
* : 重复 0 ~ n 次
. : 任意字符
\\. : 转义后的 .
\\d : 数字
public boolean isNumeric(char[] str) {
if (str == null || str.length == 0)
return false;
return new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?");
}