表示数值的字符串

2年前 (2022) 程序员胖胖胖虎阿
314 0 0

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串 "+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;
    }
}

版权声明:程序员胖胖胖虎阿 发表于 2022年11月4日 下午6:16。
转载请注明:表示数值的字符串 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...