Validate if a given string is numeric.
Some examples:
"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
1. all the characters must be numbers, dot, 'e', +/- and white space
2. leading and ending white spaces are allowed
3. string could start with +/-
4. if +/- is in the middle, it must has a 'e' right before where +/- is
5. there shouldn't be more than one 'e' and one dot
6. 'e' must follow a number
7. dot must go before 'e'
public class Solution {
public boolean isNumber(String s) {
if (s == null || s.length() == 0) {
return false;
}
int i = 0, e = s.length() - 1;
while (i <= e && Character.isWhitespace(s.charAt(i))) i++;
if (i > e) return false;
while (e >= 0 && Character.isWhitespace(s.charAt(e))) e--;
if (s.charAt(i) == '+' || s.charAt(i) == '-') i++;
boolean num = false;
boolean dot = false;
boolean exp = false;
while (i <= e) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
num = true;
} else if (c == '.') {
if (dot || exp) return false;
dot = true;
} else if (c == 'e') {
if (!num || exp) return false;
exp = true;
num = false;
} else if (c == '+' || c == '-') {
if (s.charAt(i - 1) != 'e') return false;
} else {
return false;
}
i++;
}
return num;
}
}