挑错+修改(不能一次全想明白,哭),考虑的情况有点多
大概分为
1.首位为符号位
2.'e'和'.'的数量只能小于等于1
3.'e'后面必须还有其他值
4.'e'后面可接'+','-'号,
5.'e'后面的字符串中不能出现'.'
6.str[i]在['0'~'9']之间
public class Solution {
public static boolean isNumeric(char[] str) {
if(str.length==0) {
return false;
}
int i=0;
int e_num = 1;//'e'的最大数量
int point_num =1;//'.'的最大数量
if(str[0]=='-'||str[0]=='+') {
if(str.length==1) {
return false;//后面没有值,只有符号;
}
i=1;//到时候循环的时候从什么时候开始,
}
for(;i<str.length;i++) {
if(e_num<0||point_num<0) {//.和e只能有一个
return false;
}
if(str[i]=='e'||str[i]=='E') {//e
if(i==str.length-1) {//
return false;
}
int k=i+1;
for(;k<str.length;k++) {//出现e以后,后面的字符中不能出现小数点
if(str[k]=='.') {
return false;
}
}
if(str[i+1]=='-'||str[i+1]=='+') {//匹配成功
i++;
continue;
}
}else if(str[i]=='.') {
point_num-=1;
}else if(str[i]<'0'||str[i]>'9') {
return false;
}
}
return true;
}
}


京公网安备 11010502036488号