劍指offerNo53. 表示數值的字符串(Java)

題目描述:

請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路:

表示數值的字符串遵循模式A[.[B]][e|E[C]]

     最複雜的 “+123.123e+123”

  • 先確定有無正負號,然後判斷是否是個整數,當非數字字符時候 再判斷是否是小數點 或者 是否是指數的e E
  • 若是指數的e E 在再判斷是否是 有正負號 和整數。

代碼:

package offer01;

public class TestNo53 {
    public static void main(String[] args) {
        char[] a = {'1','2','3','.','1','2','3','e','+','1','2','3'};
        System.out.println(new TestNo53().isNumeric(a));
    }

    public boolean isNumeric(char[] str) {
        //判斷數據合理
        if(str == null){
            return false;
        }
        int index = 0;//記錄+-
        int encount = 0;//記錄e
        int point = 0;//記錄點
        // + - 可以在第一個位置上或者在e之後
        if(str[0] == '-' || str[0] == '+')
            index++;
        for(int i = index;i<str.length;i++){
            if(str[i] == '-' ||str[i] == '+'){
                if(str[i-1] == 'e' || str[i-1] == 'E')
                    continue;
                else
                    return false;
            }
            //如果是e,那麼e不能出現在首末尾,並且e前面爲數字
            if(str[i] == 'e' || str[i] == 'E'){
                encount++;
                if(encount >1)
                    return false;
                if(i==0 || i==str.length-1)
                    return false;
                if(str[i-1] > 57 || str[i-1] <48)
                    return false;
                point++;
                continue;
            }
            //. 點不能出現在末位,,而且只能出現一次。不能出席那指數之後,
            if(str[i] == '.'){
                if(i==str.length-1)
                    return false;
                point++;
                if(point >1)
                    return false;
                continue;
            }
            //如果以上符號都不是,再判斷是不是其他的字符
            if(str[i] >57 || str[i] <48)
                return false;
        }
        return true;
    }
}

 

 

清醒溫柔知進退 努力上進且優秀 ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章