leetcode 判断一个字符串是否是合法数字

 

Validate if a given string is numeric.

Some examples:
"0" => true

"3." => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

"+ 4.0" => true

"-.4" => true

".+8" => false

 

public class IsNumber {

    public boolean iisNumber(String s) {
        String ss = s.trim();

        if (ss.charAt(0) == '+' || ss.charAt(0) == '-') {
             ss = ss.substring(1);
        }

        if (isIntNumber(ss))
            return true;
        else if (isDecimals(ss))
            return true;
        else if (isScientificNum(ss))
            return true;
        else
            return false;
    }

    private boolean isScientificNum(String s) {//是否是科学计数
        String [] parts = s.split("e",-1);
        if (parts.length == 2) {
            if (parts[0].isEmpty() || parts[1].isEmpty()) // e3   3e
                return false;
            else if (isIntNumber(parts[0]) && isIntNumber(parts[1])) // 3e3
                return true;
            else if (isDecimals(parts[0]) && isIntNumber(parts[1]))
                return true;
            else
                return false;

        }else
            return false;

    }


    private boolean isDecimals(String s) {  //判断是否是小数
        String [] parts = s.split("\\.",-1);
        if (parts.length == 2) {
            if (parts[1].contains("-") || parts[1].contains("+"))
                return false;

            if (isIntNumber(parts[0]) && parts[1].isEmpty()) // decimal parts  eg  3.
                return true;
            else if (parts[0].isEmpty() &&
                    (!parts[1].isEmpty()) &&
                    isIntNumber(parts[1]))  // int part is empty not decimal part  eg  .1
                return true;

            else if (isIntNumber(parts[0]) && isIntNumber(parts[1]))  //3.4  both parts not empty
                return true;
            else
                return false;

        }
        else
            return false;
    }

    private boolean isIntNumber(String s){ //判断是否是整数

        int i=0;
        if (s.length() == 0)
            return false;

        if ((s.charAt(0)== '-'|| s.charAt(0) == '+') && s.length() == 1)
            return false;

        if  (s.charAt(0) ==  '-' || s.charAt(0) == '+')
            i++;

        for ( ;i <s.length(); i++){

            if (s.charAt(i) < '0' || s.charAt(i) >'9')
                return false;

        }
        return true;
    }
}
Show Tags

Discuss

Tagged on: ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>