剑指Offer(Java版)第五十九题:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

/*
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
*/
//一开始不知道这是什么意思,后来查了资料才知道是找规律的问题:
//逐个字符进行判断,e或E、小数点或符号最多出现一次,而e或E的前一个必须是数字,且不能是第一个或最后一个字符,符号的前一个字符不能是e或E。
public class Class59 {

public boolean isNumeric(char[] str) {
if(str == null || str.length <= 0){
return false;
}
int symbol = 0; //'+'和'-'
int eOrE = 0; //'e'和'E'
int point = 0; //'.'
if(str[0] == '-' || str[0] == '+'){
symbol++;
}
for(int i = symbol; i < str.length; i++){
if(str[i] == '-' || str[i] == '+'){
if(str[i - 1] != 'e' && str[i - 1] != 'E'){
return false;
}
continue;
}
if(str[i] == 'e' || str[i] == 'E'){
eOrE++;
if(eOrE > 1){
return false;
}
if(i == 0 || str[i - 1] < 48 || str[i - 1] > 57 || i == str.length){
return false;
}
point++;
continue;
}
if(str[i] == '.'){
point++; //除了数字、符号和'e'以及'E'之外,只剩下'.'了。
if(point > 1){
return false;
}
continue;
}
if((str[i] < 48 || str[i] > 57) && (str[i] != 'e') && (str[i] != 'E')){
return false;
}
if(str[str.length - 1] == 'e' || str[str.length - 1] == 'E'){
return false;
}
}
return true;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

原文地址:https://www.cnblogs.com/zhuozige/p/12546857.html