https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。
思路:
1、出现‘+’和‘-’:只能是出现在第一位或者‘e’或‘E’后面一位
2、出现‘.’:全字符串中只能出现一次,并且出现时前面不能有‘e’或者‘E’
3、出现‘e’或者‘E’:e前面和后面都必须有数字
4、出现数字
5、其余情况均为非法表示
class Solution {
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++){
//当前为数字,数字位true
if(s.charAt(i)>='0'&&s.charAt(i)<='9'){
numflag=true;
}
//当前为.并且之前没出现.并且没出现e或E
else if(s.charAt(i)=='.'&&!dotflag&&!eflag){
dotflag=true;
}
//当前为+或-,只能出现在第一位或者e或E的后一位
else if(s.charAt(i)=='+'||s.charAt(i)=='-'){
if(i==0||(i-1>=0&&(s.charAt(i-1)=='e'||s.charAt(i-1)=='E'))){
}
else{
return false;
}
}
//当前为e或E并且之前没有出现e或E,并且之前有数字
else if((s.charAt(i)=='e'||s.charAt(i)=='E')&&numflag&&!eflag){
//数字标志位置false,防止e结尾的情况
eflag=true;
numflag=false;
}
//其余情况均false
else{
return false;
}
}
//返回数字位
return numflag;
}
}