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