劍指Offer學習-面試題20:表示數值的字符串

	/**
     * 表示數值的字符串
     * <p>
     * 表示數值的字符串遵循A[.[B]][e|EC]或者.B[e|EC]
     * A爲數值的整數部分
     * B爲數值的小數部分
     * C爲數值的指數部分
     * <p>
     * 在小數裏面可能沒有整數部分 如.123
     *
     * @param s
     * @return
     */
    public boolean isNumeric(String s) {
        if (null == s || 0 == s.length()) {
            return false;
        }
        int len = s.length();
        int index = 0;
        //這個是判斷e或者E前面是否有數值
        boolean flag = false;
        //判斷開始的符號
        if (s.charAt(index) == '+' || s.charAt(index) == '-') {
            index++;
        }
        //判斷整數部分
        while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
            index++;
            flag = true;
        }
        //判斷小數部分
        if (index < len && s.charAt(index) == '.') {
            boolean f = false;
            index++;
            while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
                index++;
                flag = true;
                f = true;
            }
            //如果.的前面沒有數字,則後面必須要數字
            if (!flag && !f) {
                return false;
            }
        }
        //判斷指數部分
        //當E或者e的前面沒有整數時,不能表示數值
        //當E或者e的後面沒有整數時,不能表示數值
        if (index < len && (s.charAt(index) == 'e' || s.charAt(index) == 'E') && flag) {
            index++;
            //判斷指數部分的正負號 比如123.45e+6
            if (index < len && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
                index++;
            }
            while (index < len && s.charAt(index) >= '0' && s.charAt(index) <= '9') {
                index++;
            }
        }
        return index == s.length();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章