public class Solution {
public boolean isNumber(String s) {
//判断是否是数字,其中会出现的有 - + E e . 五种非数字字符,根据其出现的位置条件来判断
if(s == null || s.length()==0){
return false;
}
s = s.trim();
int index =0;
boolean numExist = false;
boolean numExistAfterE = false;
boolean pointExist = false;
boolean eExist = false;
while(index<s.length()){
if(s.charAt(index) == '-' || s.charAt(index) == '+'){
if(index == 0 || s.charAt(index-1) == 'e' || s.charAt(index-1) == 'E'){//加减号只可能出现在最前面或者紧挨着e、E
//后面
index ++;
}
else{
return false;
}
}
else if(s.charAt(index) >= '0' && s.charAt(index) <= '9'){
numExist = true;
numExistAfterE = true;
index++;
}
else if(s.charAt(index) == 'e' || s.charAt(index) == 'E'){
//e和E只能出现在数字后面,且其后面一定要有数字
if(eExist || !numExist){
//e已经出现过或者e没有出现过但是其前面没有数字都返回false
return false;
}
eExist = true;
numExistAfterE = false;//当前节点为e,故其后不可能出现数字,则numExisAfterE的值为false
index++;
}
else if(s.charAt(index) == '.'){
//先写false的情况,如果点好已经存在或者点号没存在但是e已经存在,则返回false,因为e只能出现在点号后面,比如1.2e10
if(pointExist || eExist){
return false;
}
pointExist = true;
index ++;
}
else{//不是这五种字符则为false
return false;
}
}
return numExist&&numExistAfterE;
}
}