剑指Offer第五十三题:表达数值的字符串

表示数值的字符串

https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

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

public class Q_53 {
    public boolean isNumeric(char[] str) {
        boolean haspoint = false;//是否出现点号
        boolean hasE = false;//是否有科学计数法E
        boolean hasPlusMinus = false;//是否有正负号
        boolean first = true;//当前是否是第一个字符或者是E后面的第一个字符
        boolean afterE = true;//E后面是否有数据

        for (char a : str
                ) {
            if (a == '-' || a == '+') {
                if (hasPlusMinus || !first) {//判断是否出现过正负号,并且在第一个位置出现
                    return false;
                }
                hasPlusMinus = true;
                continue;
            }
            if ('E' == a || 'e' == a) {
                if (hasE) {
                    return false;
                }
                hasE = true;
                hasPlusMinus = false;//E的后面允许第一位出现正负号
                first = true;
                afterE = false;//E的后面不允许没有数字,最后输出结果的时候判断
                continue;
            }
            if ('.' == a) {
                if (haspoint || hasE) {//点号只能有一个,并且不能再E后面
                    return false;
                }
                haspoint = true;
                continue;
            }
            if ((a < 48 || a > 57)) return false;//判断是否是数字
            first = false;
            afterE = true;
        }
        return true && afterE;
    }

    public static void main(String[] args) {
        System.out.println(new Q_53().isNumeric("123.45e+6".toCharArray()));
    }

}


全部评论

相关推荐

就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务