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.
Solution 1:
public boolean isNumber(String s) {
s = s.trim();
if(s.isEmpty()) return false;
boolean num = false, exp = false, dot = false;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == 'e' || c == 'E') {
if(!num || exp) {
return false;
}
num = false; // Should be: 2e2 , so there should be number follow "e"
exp = true;
} else if(c == '.') {
if(dot || exp) { // can't be: e0.2 can't be: ..
return false;
}
dot = true;
} else if(c >= '0' && c <= '9') {
num = true;
} else if(c == '+' || c == '-') {
if(i != 0 && s.charAt(i-1) != 'e') { // filter : " 005047e+6", this is true.
return false;
}
} else { // invalid character.
return false;
}
}
return num;
}
Solution 2:
正则表达式!
public boolean isNumber(String s) {
s = s.trim();
if(s.isEmpty()) return false;
String regex = "[+-]?(\\d+\\.?|\\.\\d+)\\d*([eE][+-]?\\d+)?";
return s.matches(regex);
}