剑指offer 20. 表示数值的字符串

剑指offer 20. 表示数值的字符串

题目描述

在这里插入图片描述

解题思路

class Solution {
    
    
    public boolean isNumber(String s) {
    
    
        //s为空对象或字符串长度为0时,不能表示数值
        if (s == null || s.length() == 0) return false;
        //分别标记是否遇到数位、小数点、e或E
        boolean isNum = false, isDot = false, ise_or_E = false;
        //删除字符串头尾的空格,方便遍历字符串
        char[] str = s.trim().toCharArray();

        for (int i = 0; i < str.length; i++) {
    
    
            if (str[i] >= '0' && str[i] <= '9') {
    
      //判断是否是0~9的数位
                isNum = true;   //标记遇到数位
            } else if (str[i] == '.') {
    
       //遇到小数点
                if (isDot || ise_or_E) return false;  //重复遇到小数点或已经遇到e/E
                isDot = true;    //标记遇到小数点
            } else if (str[i] == 'e' || str[i] == 'E') {
    
       //遇到e或E
                if (!isNum || ise_or_E) return false;  //还没遇到数位或重复遇到e/E
                ise_or_E = true;  //标记遇到e/E
                isNum = false;   //遇到e/E后,isNum必须重置,防止出现123e这种非法情况
            } else if (str[i] == '+' || str[i] == '-') {
    
       //遇到正负号
                //正负号如果不是出现在第一个位置和e/E的后面一个位置,直接返回false
                if (i != 0 && str[i - 1] != 'e' && str[i - 1] != 'E') return false;
            } else {
    
    
                return false;
            }
        }
        return isNum;
    }
}

猜你喜欢

转载自blog.csdn.net/cys975900334/article/details/114990674