class Solution {
public boolean isNumber(String s) {
//1,空格 2,小数点 3,普通字符 4,e/E 5,-/+
if (s == null || s.length() == 0) {
return false;
}
//首先剔除前面和后面的空格
char[] str = s.trim().toCharArray();
if (str.length == 0) {
return false;
}
int len = str.length;
boolean is_e_or_E = false;
boolean is_dot = false;
boolean isNum = false;
for (int i = 0; i < len; i++) {
//如果是一个数字
if (str[i] >= '0' && str[i] <= '9') {
isNum = true;
}
//是一个小数点
else if (str[i] == '.') {
//不成立的格式
//前面: 不能有重复的小数点 不能有e/E
//如果前面存在了小数点或者 e/E
if (is_e_or_E || is_dot) {
return false;
}
is_dot = true;
} else if (str[i] == 'e' || str[i] == 'E') {
//前面必须要有一个数字
//前面不能出现e / E
if (is_e_or_E || !isNum) {
return false;
}
is_e_or_E = true;
isNum = false; //11E
} else if (str[i] == '-' || str[i] == '+') {
if (i != 0 && str[i - 1] != 'e' && str[i - 1] != 'E') {
return false;
}
} else {
return false;
}
}
return isNum;
}
}