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.
Update (2015-02-10):
The signature of theC++
function had been updated. If you still see your function signature accepts aconst char *
argument, please click the reload buttonto reset your code definition.
tag: pattern
class Solution {
public boolean isNumber(String s) {
if (s == null || s.length() == 0) return false;
s = s.trim();
// '.' has to after number, cannot have '.' or 'e' before
// 'e' has to after number, cannot have e before
// +/- can only be in the beginning or after e
boolean seenDot = false;
boolean seenNumber = false;
boolean seenE = false;
boolean numberAfterE = false;
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
numberAfterE = true;
seenNumber = true;
}
else if (s.charAt(i) == '.'){
if (seenDot || seenE){
return false;
}
seenDot = true;
}
else if (s.charAt(i) == 'e'){
if (seenE || !seenNumber){
return false;
}
seenE = true;
numberAfterE = false;
}
else if (s.charAt(i) == '+' || s.charAt(i) == '-'){
if (i != 0 && s.charAt(i - 1) != 'e'){
return false;
}
}
else{
return false;
}
}
return seenNumber && numberAfterE;
}
}