思路:对0 - 9 + - . Ee每次出现判断其合理性,合理就判断下一位。
重点:注意边界问题。例如- + Ee . 不能作为边界
public class Solution {
public boolean isNumeric(char[] str) {
if(str == null || str.length == 0){
return false;
}
int len = str.length;
boolean point = true;
boolean Ee = true;
int i = 0;
while(i < len){
// - + : (1)作为头,注意len = 1的情况(2)只能在Ee后面插入,判断其前一位。
if((str[i] == '-' || str[i] == '+')&& i != len - 1 && ((i == 0)
|| (i > 2 && (str[i - 1] == 'e' || str[i - 1] == 'E')))){
i++;
// . : (1)只能出现一次,不为边界 (2)不能出现在Ee后面 (3)前面必须有0-9或者+- 注:"-.123"也是合法的。。开始不知道
}else if(str[i] == '.'
&& point && Ee && i != len - 1 &&(i > 0
&& ((str[i - 1] >= '0' && str[i - 1] <= '9') || (str[i - 1] == '-' || str[i - 1] == '+')))){
i++;
//出现.后,改变标志位
point = false;
//Ee : (1)只能出现一次,不为边界 (2)前一位必须为数字
}else if((str[i] == 'E' || str[i] == 'e') && Ee && i != len - 1 && i > 0 && str[i - 1] >= '0' && str[i - 1] <= '9'){
i++;
//出现Ee后,改变标志位
Ee = false;
// 0 - 9 不用说
}else if(str[i] >= '1' && str[i] <= '9'){
i++;
//0比较特殊: (1) len为1时 即“0” (2)前一位为0 - 9 或者 .
}else if(str[i] == '0' && ((i == 0 && i == len - 1) || (i > 0 && ((str[i - 1] >= '0' && str[i - 1] <= '9') || str[i - 1] == '.')))){
i++;
}else{
return false;
}
}
return true;
}
}