leetcode-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.

 

判断所给的数据是否为10进制数。包含科学计数法:

class Solution {
    public boolean isNumber(String s) {
        if(s == null ||s.isEmpty()) {
            return false;
        }
        int aIndex = s.indexOf("e");
        int bIndex = s.lastIndexOf("e");
        if(aIndex != bIndex) {
            return false;
        }
        String[] tmps = s.trim().split("e");
        boolean c = s.contains("e");
        if(c && tmps.length!=2) {
            return false;
        }else if(!c && tmps.length!=1) {
            return false;
        }
        boolean scient = false;
        for(int index=0;index<tmps.length;index++) {
            if(index==1) {
                scient = true;
            }
            if(!isValid(tmps[index],scient)) {
                return false;
            }
        }
        return true;
    }
    
    
    public boolean isValid(String tmp,boolean scient) {
        if(tmp==null || tmp.isEmpty()) {
            return false;
        }
        int index=0;
        char[]tmps = tmp.toCharArray();
        if(tmps[0]=='+'||tmps[0]=='-') {
            index=1;
        }
        if(tmps.length <= index) {
            return false;
        }
        if(scient) {
            for(;index<tmps.length;index++) {
                if(!Character.isDigit(tmps[index])) {
                    return false;
                }
            }
            return true;
            
        }else {
            //是否包括.
            boolean contain = false;
            
            for(int tmpIndex = index;tmpIndex<tmps.length;tmpIndex++) {
                if(!Character.isDigit(tmps[tmpIndex])) {
                    if(tmps[tmpIndex]=='.' && !contain ) {
                        if((tmpIndex>=index && tmpIndex>=1 && Character.isDigit(tmps[tmpIndex-1])) || (tmpIndex==index && tmps.length > tmpIndex+1&&Character.isDigit(tmps[tmpIndex+1]))) {
                            contain = true;
                        }else{
                            return false;
                        }
                        
                    }else {
                        return false;
                    }
                }
            }
        }
        return true;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值