65 Valid Number
Validate if a given string can be interpreted as a decimal number.
Some examples:
"0"=>true
" 0.1 "=>true
"abc"=>false
"1 a"=>false
"2e10"=>true
" -90e3 "=>true
" 1e"=>false
"e3"=>false
" 6e-1"=>true
" 99e2.5 "=>false
"53.5e93"=>true
" --6 "=>false
"-+3"=>false
"95a54e53"=>false
Note:It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:
Numbers 0-9
Exponent - "e"
Positive/negative sign - "+"/"-"
Decimal point - "."
Of course, the context of these characters also matters in the input.
这题不是老师讲感觉这辈子都不会做。主要做法是,先判断+/-号,然后数字+‘.',最后’e'的部分。返回时注意判断是否整条string都parse掉。然后在判断‘e'的部分时,记得e后面要有数字。如果没加数字就已经到末尾的话,直接返回false。
这题需要注意的地方是:
trim完以后得判断一下是否已经为空,为空return false。例如:“ ”
每个while的地方都得判断i是否越界
小数点大于1 & 数字小于1。例如:"."
public boolean isNumber(String s) {
    if (s == null) {
        return false;
    }
    // 把首尾空格砍掉
    s = s.trim();
    int len = s.length();
    // 砍完发现为空串,返回false
    if (len == 0) {
        return false;
    }
    char[] sc = s.toCharArray();
    int i = 0;
    if (sc[i] == '+' || sc[i] == '-') {
        i++;
    }
    int digCnt = 0;
    int pntCnt = 0;
    while(i < len && (Character.isDigit(sc[i]) || sc[i] == '.')) {
        if (Character.isDigit(sc[i])) {
            digCnt++;
        } else {
            pntCnt++;
        }
        i++;
    }
    // 如果有2个小数点,或者没有数字的话,返回false
    if (pntCnt > 1 || digCnt < 1) {
        return false;
    }
    // 判断e部分是否valid
    if (i < len && sc[i] == 'e') {
        i++;  
        if (i < len && (sc[i] == '+' || sc[i] == '-')) {
            i++;
        }
        // ’e'后面要有数字,如果这就到结尾了,返回false
        if (i == len) {
            return false;
        }
        // 看e后面的数字是否valid
        while (i < len && Character.isDigit(sc[i])) {
            i++;
        }
    }
    return i == len;
}Last updated
Was this helpful?