思路
既然来判断,字符串是否表示数值,将字符串转成字符数组,那么便将几种特殊情况判断一下就知道了。
设置几个标签,来判断情况,初始值都为false
num:是否出现0-9
dot:是否出现小数点
eE:是否出现e,E
- 正常情况是数字,0-9
- 若是小数点
小数点之前不能有小数点和E,e符号,否则返回false - e,E
e,E之前不能出现e,E,前面必须有数字出现,否则返回false,并且出现e,E之后,需要重置数字位num。 - +号,-号
加减号只能在第一位出现,或者出现在e,E之后,否则返回false - 除上述情况之外的其他符号出现
立即返回false
话不多说,上代码
代码
class Solution {
public boolean isNumber(String s) {
if(s.length()==0){
return false;
}
boolean num=false;
boolean dot=false;
boolean eE=false;
boolean isok=false;
char []str=s.trim().toCharArray();
for(int i=0;i<str.length;i++){
if(str[i]>='0'&&str[i]<='9'){
num=true;
}
else if(str[i]=='.'){
if(dot||eE){
return false;
}
dot=true;
}
else if(str[i]=='e'||str[i]=='E'){
if(eE||!num){
return false;
}
eE=true;
num=false;
}
else if(str[i]=='-'||str[i]=='+'){
if(i!=0&&str[i-1]!='e'&&str[i-1]!='E'){
return false;
}
}
else{
return false;
}
}
return num;
}
}