剑指Offer20-表示数值的字符串
题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
解法
方法一:if-else
public boolean isNumber(String s) {
if(s==null||s.length()==0) return false;
s = s.trim();
boolean numFlag = false;
boolean dotFlag = false;
boolean eFlag = false;
for(int i = 0 ; i < s.length() ; ++i){
char c = s.charAt(i);
if(c>='0'&&c<='9'){
//判定为数字,则标记numFlag
numFlag = true;
}else if(c=='.'&&!dotFlag&&!eFlag){
//判定为. 需要没出现过.并且没出现过e
dotFlag = true;
}else if((c=='e'||c=='E')&&!eFlag&&numFlag){
//判定为e,需要没出现过e,并且出过数字了
eFlag = true;
numFlag = false;//为了防止123e这样的情况
}else if((c=='+'||c=='-')&&(i==0||s.charAt(i - 1) == 'e' || s.charAt(i - 1) == 'E')){
//判定为+-符号,只能出现在第一位或者紧接e后面
continue;
}else{
//其他情况,是错误的
return false;
}
}
//返回numFlag即可
return numFlag;
}
方法二:有限状态机