54.表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)
思路:逐个字符进行判断,e或E和小数点最多出现一次,而e或E的前一个必须是数字,且不能是第一个或最
后一个字符,符号的前一个字符不能是e或E。也可用正则表达式判断!
E或e:

后面必须有数字

不能有两个E

+或-:

第一次出现,是否在符号位;第一次出现并且不在符号位或者不是第一次出现,前一位必须为E

小数点:

只能有一个小数点

数值:

数字 e、E、+、-、.

public class Solution {
    public boolean isNumeric(char[] str) {
        //signal表示符号,decimal表示小树点,hasE表示含有符号e
        boolean signal = 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(signal && str[i-1] != 'E' && str[i-1] != 'e'){
                    return false;
                }
                //第一次出现,如果不是出现在第一位,那么还是判断一下是不是出现在e的后面一位
                if(!signal && i>0 && str[i-1] != 'E' && str[i-1] != 'e'){
                    return false;
                }
                signal = true;
            }else if(str[i] == '.'){
                //如果存在e并且e后面为小数则不通过
                if(hasE){
                    for(;i>=0;i--){
                        if(str[i] == 'e' || str[i] == 'E'){
                            return false;
                        }
                    }
                }
                //不能有两个小数点
                if(decimal){
                    return false;
                }
                decimal = true;
            }else if(str[i] < '0' || str[i] > '9'){
                //不是e也不是+-符号也不是小数点,那么只能是数字,不是数字就是非法的字符
                return false;
            }
        }
 
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/lupa1521/article/details/89813586
今日推荐