LeetCode 每日一题 [52] 表示数值的字符串

LeetCode 表示数值的字符串 [中等]

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof

题目分析
解法1

正则表达式 不过我还没写出来.......

解法2

遍历循环一个一个的进行判断

代码实现
public class IsNumber {
    public static void main(String[] args) {
        System.out.println(isNumber("1.2.3"));
    }


    public static boolean isNumber2(String s) {
        if (s == null || s.length() == 0) {
            return false;
        }
        String regex = "[.+-]";
        return s.matches(regex);
    }

    public static boolean isNumber(String s) {
        if (s == null || s.length() == 0) {
            return false;
        }
        boolean numSeen = false;
        boolean dotSeen = false;
        boolean eSeen = false;
        char[] str = s.trim().toCharArray();
        for (int i = 0; i < str.length; i++) {
            if (str[i] >= '0' && str[i] <= '9') {
                numSeen = true;
            } else if (str[i] == '.') {
                if (dotSeen || eSeen) {
                    return false;
                }
                dotSeen = true;
            } else if (str[i] == 'e' || str[i] == 'E') {
                if (eSeen || !numSeen) {
                    return false;
                }
                eSeen = true;
                numSeen = false;
            } else if (str[i] == '-' || str[i] == '+') {
                if (i != 0 && str[i - 1] != 'e' && str[i - 1] != 'E') {
                    return false;
                }
            } else {
                return false;
            }
        }
        return numSeen;
    }
}

你可能感兴趣的:(LeetCode 每日一题 [52] 表示数值的字符串)