题目描述:
思路:题解给出的做法是有限状态自动机,但是个人认为反而复杂了。这道题只需要仔细分析各个符号出现位置及出现条件即可。.之前不能出现.或者e,e之前不能出现e,必须出现数,±出现在0位置或者e/E的后面第一个位置才是合法的。此外还需要去除原字符串中的空格。
package reflection;
class Solution {
public static void main(String[] args) {
System.out.println(new Solution().isNumber("1 "));
}
public boolean isNumber(String s) {
if(s==null||s.length()==0)return false;
char [] str=s.trim().toCharArray();
boolean num=false;
boolean dot=false;
boolean e=false;
for(int i=0;i<str.length;i++){
if(str[i]=='+'||str[i]=='-'){
if(i!=0&&str[i-1]!='e'&&str[i-1]!='E'){//与(i!=0&&str[i-1]!='e')||(i!=0&&str[i-1]!='E')等价
return false;
}
}else if(str[i]>='0'&&str[i]<='9'){
num=true;
}else if(str[i]=='e'||str[i]=='E'){
if(e || !num)return false;
e=true;
num=false;
}else if(str[i]=='.'){
if(dot||e)return false;
dot=true;
}else return false;
}
return num;
}
}