话不多说,直接上代码。
这道题十分恶心,刷起来很难受。
class Solution {
public boolean isNumber(String s) {
if (s == null || s.length() == 0) return false;
//因为头尾会出现空格
s = s.trim();
boolean numFlag = false;
boolean dotFlag = false;
boolean eFlag = false;
for(int i = 0; i < s.length(); i++){
//判定为数字,则标记numFlag
if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
numFlag = true;
//判定为.需要没出现过.并且没出现过e
}else if(s.charAt(i) == '.' && !dotFlag && !eFlag){
dotFlag = true;
//判定为e,需要没出现过e并且出现过数字
}else if((s.charAt(i) == 'e' || s.charAt(i) == 'E') && numFlag && !eFlag){
eFlag = true;
numFlag = false;
//+-符号只能在第一位要么是跟着e出现
}else if((s.charAt(i) == '+' || s.charAt(i) == '-') && (i == 0 || s.charAt(i-1) == 'e' || s.charAt(i-1) == 'E')){
}else{
return false;
}
}
return numFlag;
}
}