【字符串】表示数值的字符串

题目描述

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

示例2
输入
“1.2.3”
返回值
false


这道题没有太多技巧,只需要使用if-else列出所有情况即可,使用两个变量can_ecan_dot表示是否能够出现这些字符,+-只能出现在第一位或者e(E)后面,因此当遇到加减号时直接判断即可,遍历字符串:

  • 当遇到数字则继续
  • 若遇到加减号,判断±号是否出现在第一位或是在e或E后,若不是则返回false,不是一个合法的数值字符串
  • 若遇到e或者E,若它出现在最后一位,则返回false,不是一个合法的数值字符串;若can_e为true,则表明可以出现e和E,并且将can_e置为false,表示后续不能出现e或E,同时把can_dot置为false,因为e后面只能是整数,不能是浮点数
  • 若遇到.,若can_dot为true,表示可以出现小数,此时要把can_dot置为false,因为一个数值字符串不能出现两个小数点;若can_dot为false,则返回false,这是一个非法的字符串
  • 若不是上述所有字符,直接返回false即可

若能遍历完字符串,则表明是一个数值字符串,返回true

public class Solution {
    
    
    public boolean isNumeric(char[] str) {
    
    
        if (str.length == 0) return false;
        // 设置一些布尔值表示后续是否能出现某些字符
        boolean can_e = true, can_dot = true;
        for (int i = 0; i < str.length; i++) {
    
    
            if (str[i] >= '0' && str[i] <= '9') continue; // 数字不管
            if (str[i] == '+' || str[i] == '-') {
    
    
                // +-可以出现在第一位或e之后
                if (i == 0) continue;// 出现在第一位是可以的
                if (!can_e && (str[i - 1] == 'e' || str[i - 1] == 'E')) continue; // 如果是在e或E后面,是可以的
                return false;
            } else if (str[i] == 'e' || str[i] == 'E') {
    
    
                if (i == str.length - 1)
                    return false; // e在最后一位
                if (can_e) {
    
    
                    can_e = false;
                    can_dot = false;
                } else return false;
            } else if (str[i] == '.') {
    
    
                if (can_dot) {
    
    
                    can_dot = false;
                    continue;
                }
                return false;
            } else return false;
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43486780/article/details/113915642