牛客(53)表示数值的字符串
// 题目描述 // 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 // 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 // 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 public static boolean isNumeric(char[] str) { if (str == null) { return false; } //第一个不是数字 + 或者减好 //多个小数点不是数字 //含有e|E意外的字母不是数字 //e|E后面跟小数不是数字 //含有多个符号不是数字 int dot = 0; int countE = 0; int countO = 0; int countN = 0; for (int i = 0; i < str.length; i++) { if (str[i] >= '0' && str[i] <= '9') { countN++; }else if (str[i] == 'e' || str[i] == 'E') { if (countN<=0){ return false; } //如果e前面不是数字 if (str[i-1]<'0'&&str[i-1]>'9'){ return false; } //因为e后面不能出现dot 所有 if (dot<1){ dot=1; } i++; //e的下一位可以使+|- if (i<str.length&&(str[i]=='+'||str[i]=='-')){ if ((i+1<str.length)){ if (!(str[i+1]<'9'&&str[i+1]>'0')){ return false; } countN++; }else { return false; } countO--; }else if (i<str.length&&(str[i]<'9'&&str[i]>'0')){ countN++; }else{ return false; } countE++; }else if (str[i] == '+' || str[i] == '-') { if (countN>0){ return false; } countO--; }else if (str[i]=='.'){ dot++; }else{ return false; } } if (countN<=0||dot>1||countE>1||countO>1){ return false; } return true; }