表示数值的字符串
表示数值的字符串
https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&&tqId=11206&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
public boolean isNumeric(char[] str) {
if(str.length == 0)
return false;
int index = 0;
int ecount = 0; //e 的数量
int pcount = 0; //符号的数量
if(str[index] == '+' || str[index] == '-')
index++;
for(int i = index; i < str.length; i++){
if(str[i] == '-' || str[i] == '+'){
// +-号只能放在数字最前面,或者eE的后面,最前面已经在前面先做了判断
if(str[i-1] != 'e' && str[i-1] != 'E')
return false;
continue;
}
if(str[i] == 'e' || str[i] == 'E'){
ecount++;
if(ecount > 1) //e已经出现过了,不能再出现了
return false;
// e不能放在第一位,e的前面必须是数组,e不能放在最后以为
if(i == 0 || str[i-1] < 48 || str[i-1] > 57 || i == str.length-1)
return false;
pcount++; //为什么要加呢?因为e的后面就不能加小数点了
continue;
}
if(str[i] == '.'){
pcount++;
if(pcount > 1) //出现过小数点了,不能再出现了
return false;
continue;
}
//如果出现其他符号直接返回false
if((str[i] < 48 || str[i] > 57) && (str[i] != 'e') && (str[i] != 'E') && (str[i] != '.') )
return false;
}
return true;
}
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~
