zoukankan      html  css  js  c++  java
  • 表示数值的字符串


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


    解题思路

    没啥可投机取巧的,只能一个一个条件判断

    public class Solution {
        public boolean isNumeric(char[] str) {
            if(str.length == 0) {
                return false;
            }
            if(str.length == 1) {
                if(str[0] < '0' || str[0] > '9') {
                    return false;
                }
            }
            // 标记符号、小数点、e/E 是否出现过
            boolean sign = false, decimal = false, hasE = false;
            for(int i = 0; i < str.length; i++) {
                if(str[i] == 'e' || str[i] == 'E') {
                    // e 后面一定要接数字
                    if(i == str.length - 1) {
                        return false;
                    }
                    // 不能同时存在两个 e
                    if(hasE) {
                        return false;
                    }
                    hasE = true;
                } else if(str[i] == '+' || str[i] == '-') {
                    // 第二次出现 +/- 符号,则必须紧接在 e 之后
                    if(sign && str[i - 1] != 'e' && str[i - 1] != 'E') {
                        return false;
                    }
                    // 第一次出现 +/- 符号,且不在字符串开头,也必须紧接在 e 之后
                    if(!sign && i > 0 && str[i - 1] != 'e' && str[i - 1] != 'E') {
                        return false;
                    }
                    sign = true;
                } else if(str[i] == '.') {
                    // e 后面不能接小数点,小数点不能出现两次
                    if(hasE || decimal) {
                        return false;
                    }
                    decimal = true;
                } else if(str[i] < '0' || str[i] > '9') {
                    // 不合法字符
                    return false;
                }
            }
            return true;
        }
    }
    

  • 相关阅读:
    js将时间戳转化为时间,(不省略0)
    SpringMVC路径传参
    贪心算法及实例
    剪绳子(贪心算法)
    c语言输入一行未知个数数字存入数组
    Netlink机制详解
    new和malloc的区别
    堆 和 栈的 区别
    strlen与sizeof区别(转载)
    任务
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/14141864.html
Copyright © 2011-2022 走看看