• 牛客网 表示数值的字符串


    题目:

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

    解题:

    public class Solution {
        private int index = 0;
        public boolean isNumeric(char[] str) {
            // input check
            if(str.length < 1)
                return false;
            // execute
            boolean result = scanInteger(str);
            if(index < str.length && str[index] == '.'){
                index++;
                // 下面这句表示三种情况:整数部分和小数部分都存在; 整数部分存在,小数部分不存在; 整数部分不存在,小数部分存在
                // 不允许出现正数和小数都不出现的情况
                // 务必留意: result必须在||右边, 不能放在左边. 因为如果放在左边,同时result又是true, 那么就不会执行||右边的语句了
                result = scanUnsignedInteger(str) || result;
            }
            if(index < str.length && (str[index] == 'e' || str[index] == 'E')){
                index++;
                result = result && scanInteger(str);
            }
            // 不仅要返回result, 还要确保已经判断完每个char
            return result && (index == str.length);
        }
    
        public boolean scanInteger(char[] str){
            if(index < str.length && (str[index] == '+' || str[index] == '-'))
                index++;
            return scanUnsignedInteger(str);
        }
        public boolean scanUnsignedInteger(char[]str){
            int start = index;
            while(index < str.length && str[index] >= '0' && str[index] <= '9'){
                index++;
            }
            // index比start大, 说明扫描的部分有数字, 返回ture
            // index等于start, 说明扫描的部分没有数字, 返回false
            return start < index;
        }
    }
  • 相关阅读:
    【每日scrum】5.3
    Scrum仪式之Sprint计划会议
    软工结队开发--成员介绍
    java反射保存
    java后台开发传输乱码&&接口post传参失败
    润乾报表之分组
    润乾报表之居中无效(去空格)
    润乾报表之日期格式、小数位数
    润乾报表之序号、固定行数、统计
    润乾报表之条形码
  • 原文地址:https://www.cnblogs.com/yanhowever/p/12237536.html
Copyright © 2020-2023  润新知