题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路解析:
1.判空,数组长度为0
2.判断'+','-',index++,判断长度,长度等于字符串长度,返回true
3.检查数字scanDigits(str,index),判断长度,长度等于字符串长度,返回true
4.index没完,判断有小数点,index++,然后scanDigits(str,index),判断长度,长度等于字符串长度,返回true;长度不等于同样要检查'e','E'
|无小数点,判断有没有'e','E',有index++,然后判断指数合法
|无'e','E',返回false
代码:
public class Solution {
public boolean isNumeric(char[] str) {
int index=0;
if(str==null||str.length<=0)
return false;
if(str[0]=='+'||str[0]=='-')
index++;
if(index==str.length)
return false;
index=scanDigits(str,index);
if(index<str.length){
if(str[index]=='.'){
index++;
index = scanDigits(str,index);
if(index<str.length-1){
if(str[index]=='e'||str[index]=='E'){
index++;
return isExponential(str,index);
}
return false;
}
return true;
}else if(str[index]=='e'||str[index]=='E'){
index++;
return isExponential(str,index);
}
return false;
}
return true;
}
private boolean isExponential(char[] str,int index){//指数
if(index<str.length){
if(str[index]=='+'||str[index]=='-')
index++;
index=scanDigits(str,index);
if(index==str.length)
return true;
return false;
}
return false;
}
private int scanDigits(char[] str,int index){//整数
while(index<str.length&&str[index]>='0'&&str[index]<='9')
index++;
return index;
}
}