# leetcode-question65

xiaoxiao2021-02-28  28

### 代码

class Solution { public boolean isNumber(String s) { boolean ret = false; if(s == null || s.equals("")){ return ret; } if("+.".equals(s.trim())) return false; if("-.".equals(s.trim())) return false; char[] str2char = s.toCharArray(); int start = 0; for(int i = 0; i < str2char.length;++i){ if(str2char[i] == ' ') { start ++; continue; } break; } int end = str2char.length; for(int i = str2char.length -1 ; i >=0 ;-- i){ if(str2char[i] == ' ') { end --; continue; } break; } if(start == str2char.length) return ret; int countE = 0; int countDot = 0; boolean hasE = false; boolean hasDot = false; int countP = 0; int countC = 0; int posE = 0; int posDot = 0; int posC = 0; int posP = 0; for(int i = start; i < end; ++ i){ if(i == start && (str2char[i] > '9' || str2char[i] < '0') && str2char[i] != '-' && str2char[i] != '+' && str2char[i] != '.') return ret; if(i == start && (str2char[i] == '-' || str2char[i] == '+')){ continue; } if((str2char[i] <= '9' && str2char[i] >= '0') || str2char[i] == 'e' || str2char[i] == 'E' || str2char[i] =='.' || str2char[i] =='+' || str2char[i] == '-'){ if(countE <= 1 && countDot <= 1 && str2char[i] <= '9' && str2char[i] >= '0'){ continue; } if(str2char[i] == 'e' || str2char[i] == 'E'){ hasE = true; countE ++; posE = i; continue; } if(str2char[i] == '.'){ hasDot = true; posDot = i; countDot ++; continue; } if(str2char[i] == '+'){ countP ++; posP = i; continue; } if(str2char[i] == '-'){ countC ++; posC = i; continue; } } if(str2char[i] > '9' || str2char[i] < '0' ){ return ret; } } if(countE > 1) return ret; if(countDot > 1) return ret; if(countP > 1){ return ret; } if(countC > 1){ return ret; } if((countP == 1 || countC == 1) && !hasE ) return ret; if(countP == 1 && posP == end - 1) return ret; if(countC == 1 && posC == end - 1) return ret; if(countP == 1 && hasE && posE == posP - 1 && posP != end - 1) return true; if(countC == 1 && hasE && posE == posC - 1 && posC != end - 1) return true; if(hasE && hasDot && posE < posDot) return ret; if(hasE && (posE == end - 1 || str2char[posE + 1] > '9' || str2char[posE + 1] < '0' || (hasDot && posDot==start && posE == posDot + 1) || (posE-1 < start || str2char[posE - 1] == '+' || str2char[posE - 1] =='-') )) return ret; if(hasDot && ((posDot -1) >= start && ((str2char[posDot - 1] > '9' || str2char[posDot - 1] < '0') && (str2char[posDot - 1] != '+' && str2char[posDot - 1] != '-') ))) return ret; if(end - start == 1 && hasDot) return ret; return true; } }