1、题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
2、思路
A为最前面数值的整数部分,B为前面数值的小数部分,C为紧跟着e或E的整数。在小数里可能没有数值的整数部分,例如.123等于0.123,因此A部分不是必须的。只要A,B,C三部分都符合要求,那么这个字符串就表示数值。
3、代码实现
public class Solution {
public boolean isNumeric(char[] str) {
if(str.length <= 0){
return false;
}
int i=0;
if(str[i]=='+' || str[i]=='-'){
i++;
}
int before = i;
for(;i<str.length;i++){
if(str[i]>='0' && str[i]<='9'){
continue;
}else{
break;
}
}
boolean A = false;
if(i > before){
A = true;
}
if(i<str.length && str[i] == '.'){
i++;
before = i;
for(;i<str.length;i++){
if(str[i]>='0' && str[i]<='9'){
continue;
}else{
break;
}
}
}
boolean B = false;
if(i>before){
B=true;
}
boolean numeric = A || B;
if(i<str.length &&(str[i]=='e' || str[i]=='E')){
++i;
if(i<str.length && (str[i]=='+' || str[i]=='-')){
i++;
}
before = i;
for(;i<str.length;i++){
if(str[i]>='0' && str[i]<='9'){
continue;
}else{
break;
}
}
boolean C = false;
if(i > before){
C=true;
}
numeric = numeric && C;
}
return numeric && i==str.length;
}
}