zoukankan      html  css  js  c++  java
  • 牛客(53)表示数值的字符串

    //    题目描述
    //    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
    //    例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
    //    但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
        public static boolean isNumeric(char[] str) {
    
            if (str == null) {
                return false;
            }
            //第一个不是数字 + 或者减好
            //多个小数点不是数字
            //含有e|E意外的字母不是数字
            //e|E后面跟小数不是数字
            //含有多个符号不是数字
            int dot = 0;
            int countE = 0;
            int countO = 0;
            int countN = 0;
            for (int i = 0; i < str.length; i++) {
                if (str[i] >= '0' && str[i] <= '9') {
                    countN++;
                }else if (str[i] == 'e' || str[i] == 'E') {
                    if (countN<=0){
                        return false;
                    }
                    //如果e前面不是数字
                    if (str[i-1]<'0'&&str[i-1]>'9'){
                        return false;
                    }
                    //因为e后面不能出现dot 所有
                    if (dot<1){
                        dot=1;
                    }
    
                    i++;
                    //e的下一位可以使+|-
                    if (i<str.length&&(str[i]=='+'||str[i]=='-')){
                        if ((i+1<str.length)){
                            if (!(str[i+1]<'9'&&str[i+1]>'0')){
                                return false;
                            }
                            countN++;
                        }else {
                            return false;
                        }
                        countO--;
                    }else if (i<str.length&&(str[i]<'9'&&str[i]>'0')){
                        countN++;
                    }else{
                        return false;
                    }
                    countE++;
                }else if (str[i] == '+' || str[i] == '-') {
                    if (countN>0){
                        return false;
                    }
                    countO--;
                }else if (str[i]=='.'){
                    dot++;
                }else{
                    return false;
                }
            }
            if (countN<=0||dot>1||countE>1||countO>1){
                return false;
            }
    
            return true;
        }
  • 相关阅读:
    基于k8s搭建微服务日志收集中心
    分析java堆内存满时那些类占用内存居多
    yizimi 在 DMG 的板子库 (数据结构与算法)
    Contest 3/14
    基础算法训练1
    图论基础训练
    2021.03.09随笔
    树莓派 4B 安装 openEuler
    Docker 学习准备
    关于备案第二个服务器时遇到的问题
  • 原文地址:https://www.cnblogs.com/kaibing/p/9099979.html
Copyright © 2011-2022 走看看