思路:对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; } }