剑指 Offer 20. 表示数值的字符串

表示数值的字符串

思路

多边界的问题,
在这里插入图片描述

求解

package swordPointingToTheOffer;

public class Twenty {
    public static boolean isNumber(String s) {
        //空格,小数点,E/e, 普通字符,  + -
        if(s ==null||s.length()<=0){
            return false;
        }
        //去掉首尾的空格,并且转换为字符数组
        char[] res = s.trim().toCharArray();
        if(res.length<0){
            return false;
        }

        int n =res.length;

        if(n==1&&res[0]=='.'){
            return false;
        }else if(n==0){
            return false;
        }


        boolean is_dot = false;
        boolean is_e_or_E = false;
        boolean is_num = false;
        //逐一检查是否合格
        for (int i =0;i<n;i++){
            if(res[i]>='0'&&res[i]<='9'){
                is_num = true;
            }else if(res[i]=='.'){
                //小数点的前面不能有重复的小数点,也不能出现e/E
                if(is_dot||is_e_or_E){
                    return false;
                }
                is_dot = true;
            }else if(res[i]=='e'||res[i]=='E'){
                //  e/E 的前面要有一个数字,且不能再重复出现eE
                if(is_e_or_E||!is_num){
                    return false;
                }
                is_e_or_E = true;
                is_num = false; //重置  (5e2)
            }else if(res[i]=='-'||res[i]=='+'){
                //-1E-16
                if(i!=0 && res[i-1]!='e'&&res[i-1]!='E'){
                    return false;
                }
            }else {
                //其他的字符,直接出错
                return false;
            }
        }
        return is_num;
    }

    public static void main(String[] args) {
//        System.out.println(isNumber("-1E-16"));
//        System.out.println(isNumber("1a3.14"));
        String arr[]={"12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"};
        System.out.println(arr[0]);
        System.out.println(isNumber(arr[0]));

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值