题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
解题思路:
1.判断运算符号的位置是否正确。
2.判断小数点出现的次数。
3.判断e的位置。
实际操作:
public boolean isNumeric(char[] str) {
//空字符串时,返回false
if (str==null) return false;
//符号e和小数点
int numE=-1;
int numDot=-1;
for (int i = 0; i < str.length; i++) {
//加减号只能在e后,正负号应在字符串首位。
if (str[i]=='-' || str[i]=='+') {
if (i!=0) {
if (str[i-1]!='e' && str[i-1]!='E' || i==str.length-1) return false;
}
}
else if (str[i]=='.') {
//小数点只可以出现一次,出现第二次时,值发生变化
if (numDot!=-1) return false;
else numDot=i;
}
else if (str[i]=='E' || str[i]=='e') {
//e也只可以出现一次,e不能为最后一位
if (numE !=-1 || i==str.length-1) return false;
else numE=i;
}
//小数点不能在e后面
else if (numE!=-1 && numE< numDot) {
return false;
}
//不是数字的返回false
else if (str[i]<'0' || str[i]>'9') {
return false;
}
}
return true;
}