表示数值的字符串

问题陈述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。

解题思路

**常规思路:**根据条件判断可能出现的情况,最终返回结果。

**进阶解法:**自动状态机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution{
public isnumber(String s){
if(s==null||s.length()==0) return false;
boolean isDigit=false,isDot=false,is_eE=false;
char[] ch=s.trim().toCharArray();//删去字符串前后空格转换为字符数组
for(int i=0;i<ch.length;i++){
if(ch[i]>='0'&&ch[i]<='9') isDigit=true;
else if(ch[i]=='.'){
if(isDot||is_eE) return false;//小数点前面不能重复出现小数点或存在e
isDot=true;
}
else if(ch[i]=='e'||ch[i]=='E'){
if(!isDigit||is_eE) return false;//e前面必须是数字,且不能重复存在e
is_eE=true;
isDigit=false;//e后面必须为数字
}
else if(ch[i]=='+'||ch[i]=='-'){
if(i!=0&&ch[i-1]!='e'&&ch[i-1]!='E') return false;
}
else
return false;
}
return isDigit;
}
}