1 public class Solution { // don't forget 'break' 'if(s.length()<=0) return false;' should be after trim
2 public boolean isNumber(String s) {
3 s = s.trim();
4 if(s.length()<=0) return false;
5 boolean eFound = false;
6 boolean dFound = false;
7 int end = s.length()-1;
8 for(int i=0;i<=end;i++){
9 char pre = i==0?'x':s.charAt(i-1);
10 char next = i==end?'x':s.charAt(i+1);
11 char c = s.charAt(i);
12 switch(c){
13 case '+':
14 case '-':
15 if(i==end) return false;
16 if(next=='e') return false;
17 if(i!=0 && pre!='e') return false;
18 break;
19 case '.':
20 if(eFound||dFound) return false;
21 if(!Character.isDigit(pre) && !Character.isDigit(next)) return false;
22 dFound = true;
23 break;
24 case 'e':
25 if(eFound) return false;
26 if(i==0 || i==end) return false;
27 if(!Character.isDigit(pre) && pre!='.') return false;
28 eFound = true;
29 break;
30 case ' ': return false;
31 default: if(!Character.isDigit(c))return false;
32 }
33 }
34 return true;
35 }
36 }