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.
This is a very good problem to test if you are careful, or I would like to use, meticulous, enough to consider every possible cases.Some test cases besides the examples that trapped me:
"-1."
"."
"46.e3"
"005046e+6000"
public class ValidNumber { public boolean isNumber(String s) { if (s == null || s.length() == 0) return false; int leftBound = 0; int rightBound = s.length() - 1; while (leftBound < s.length() && s.charAt(leftBound) == ' ') leftBound++; while (rightBound > leftBound && s.charAt(rightBound) == ' ') rightBound--; while (leftBound < s.length() && (s.charAt(leftBound) == '+' || s.charAt(leftBound) == '-')) leftBound++; if (leftBound > rightBound) return false; s = s.substring(leftBound, rightBound + 1); boolean dot = false; boolean num = false; boolean exp = false; for (int i = 0; i < s.length(); i++) { if (Character.isDigit(s.charAt(i))) num = true; else if (s.charAt(i) == '.') { if (dot || exp) return false; dot = true; } else if (s.charAt(i) == 'e') { if (exp || !num) return false; exp = true; num = false; } else if ((s.charAt(i) == '+' || s.charAt(i) == '-')) { if (s.charAt(i - 1) != 'e') return false; } else return false; } return num; } }
No comments:
Post a Comment