/** * 表示数值的字符串遵循模式 A[.[B]][e|EC]或者.B[e|EC] * 其中A为数值的整数部分,B紧跟小数点,为数值的小数部分,C紧跟着e或者E,为数值的指数部分 * A和C都可能以+或者-开头的0~9的数位串 * B也是0~9的数位串,但是不能以正负号开头 * * @param str * @return */ public boolean isNumeric (String str) { // write code here if (str == null || str.length() == 0){ return false; } if (str.length() == 1 && (str.charAt(0) > '9' || str.charAt(0) < '0')){ return false; } int index = 0; char lastE = str.charAt(0); if (str.charAt(0) == '+' || str.charAt(0) == '-'){ index++; } while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){ lastE = str.charAt(index); index ++; if (index == str.length()){ return true; } } if (index < str.length() && str.charAt(index) == '.'){ index ++; while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){ index++; if (index == str.length()){ return true; } } if (str.charAt(index) == 'E' || str.charAt(index) == 'e'){ index ++; if (str.length() == index){ return false; } if (str.charAt(index) == '+' || str.charAt(index) == '-'){ index++; } if (str.length() == index){ return false; } while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){ index++; if (index == str.length()){ return true; } } if (str.length() != index){ return false; } }else { return false; } }else if (index < str.length() &&(lastE != '+' && lastE != '-')&& (str.charAt(index) == 'E' || str.charAt(index) == 'e')){ index ++; if (str.length() == index){ return false; } if (str.charAt(index) == '+' || str.charAt(index) == '-'){ index++; } if (str.length() == index){ return false; } while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){ index++; if (index == str.length()){ return true; } } if (str.length() != index){ return false; } }else { return false; } return true; }