65 Valid Number

Problem

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.

Solutions

public class Solution {
    public boolean isNumber(String s) {
        s = s.trim();
        if (s.indexOf("e") != -1) {
            int cut = s.indexOf("e");
            return validNumber(s.substring(0, cut), true) && validNumber(s.substring(cut + 1), false);
        }
        else {
            return validNumber(s, true);
        }
    }
    private boolean validNumber(String s, boolean canBeDouble) {
        if (s.length() == 0) {
            return false;
        }
        if (s.charAt(0) == '-' || s.charAt(0) == '+') {
            s = s.substring(1);
        }
        if (s.indexOf(".") != -1) {
            if (canBeDouble == false) {
                return false;
            }
            int cut = s.indexOf(".");
            return (validInteger(s.substring(0, cut), true) && validInteger(s.substring(cut + 1), false)) || (validInteger(s.substring(0, cut), false) && validInteger(s.substring(cut + 1), true));
        }
        else {
            return validInteger(s, false);
        }
    }
    private boolean validInteger(String s, boolean canBeEmpty) {
        if (!canBeEmpty && s.length() == 0) {
            return false;
        }
        for (int i = 0; i < s.length(); i ++) {
            char c = s.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }
}

Last updated