53.表示数值的字符串(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) {
        boolean sign = false;
        boolean point = false;
        boolean hase = false;
        for(int i=0;i<str.length;i++)
        {
            if(str[i]=='e'||str[i]=='E')
            {
                if(i==str.length-1) return false; // e后面一定要接数字
                if(hase) return false;  // 不能同时存在两个e
                hase = true;
            }
            else if(str[i]=='+'||str[i]=='-')
            {
                // 第一次出现+-符号,且不是在字符串开头,则也必须紧接在e之后
                if(!sign && i > 0 && str[i-1] != 'e' && str[i-1] != 'E') return false;
                // 第二次出现+-符号,则必须紧接在e之后
                if(sign && str[i-1] != 'e' && str[i-1] != 'E') return false;   
                sign = true;
            }
            else if(str[i] == '.') 
            {
                if (hase || point) return false;  // e后面不能接小数点,小数点不能出现两次
                point = true;
            }
            else if (str[i] < '0' || str[i] > '9')  // 不合法字符
                return false; 
        }
        return true;
    }
}
发布了58 篇原创文章 · 获赞 0 · 访问量 658

猜你喜欢

转载自blog.csdn.net/gaopan1999/article/details/104656402