valid-number(数字验证)

题目

验证给定的字符串是否为数字。

一些例子:
“0”=>true
“0.1”=> true
“ABC”=>false
“1 a”=> false
“2E10”=>true

代码实现1:正则表达式


public boolean isNumber(String s) {
    return s.matches("(\\s)*([+-])?(([0-9]*\\.)?([0-9]+)|([0-9]+)(\\.[0-9]*)?)([eE][\\+-]?[0-9]+)?(\\s)*");
 }

代码实现2:



/**思路:这道题关键是分析所有会出现的情况。以及设置关键的flag来记录各种情况
  * 首先使用trim()函数去除前后空格。
  * 设置4个标志,分别是
  * boolean pointSeen = false;//是否出现过小数点“.”
  * boolean eSeen =alse;//是否出现过指数标志“e”
  * boolean numberSeen = false;//是否出现过数字
  * booleannumberAfterE = true;//e后面是否有数字
  * 进行循环s.charAt(i):
  * 1.如果属于[0,9],把numberSeen设为true
  * 2.如果是‘.’,必须之前没有遇到'.'和'e'
  * 3.如果是'e',必须之前没有遇到过'e'
  * 4.如果是'+'或者'-',当前i必须是0,或者i-1上的字符是e
  * 5.其他情况返回false
  * /
  public boolean isNumber(String s) {
        s = s.trim();
        if (s == null || s.length() == 0)
            return false;
        // 记录是否出现过数字
        boolean numberSeen = false;
        // 是否出现过小数点
        boolean pointSeen = false;
        // 是否出现过指数标志e
        boolean eSeen = false;
        // e后是否出现过数字
        boolean numberAfterE = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (c >= '0' && c <= '9') {// 如果是数字
                numberSeen = true;
                numberAfterE = true;               
            }else if (c == '.') {// 如果是小数点
                if (pointSeen || eSeen)
                    return false;
                pointSeen = true;
            }else if (c == 'e') {// 如果是e,必须没有出现过且出现过数字
                if (eSeen || !numberSeen)
                    return false;
                 eSeen = true;
                 numberAfterE = false;
            }else if (c == '+' || c == '-') {// 如果出现正负号,必须是首位,或者前一位是e
                if (i != 0 && s.charAt(i - 1) != 'e')
                    return false;
            }else {
                return false;
            }
        }
        return numberSeen && numberAfterE;
    }

题目来自牛客网leetcode

猜你喜欢

转载自blog.csdn.net/everyfriday_shujk/article/details/80101180