1. 程式人生 > 其它 >【劍指offer中等部分21】表示數值的字串(java)

【劍指offer中等部分21】表示數值的字串(java)

技術標籤:劍指offer字串java資料結構

題目描述

請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示數值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
在這裡插入圖片描述

分析

判斷每個字串有下面幾個步驟:
1、判斷首位是否為符號位
2、非首位數字是不是0-9,而非其他字元
3、若遇到小數點和e,則判斷其後面字元是否符合數值表示式的要求

實現程式碼如下:

public class Solution {
    public boolean isNumeric(char[] str) {
        
        if(str==null || str.length < 1){
            return false;
        }
        int len = str.length; //每個字元的長度
        for(int i = 0 ; i < len ; i++){
            if(str[i] == '+' || str[i] == '-'){
                if
(i != 0){ return false; }else continue; } if (str[i] == '.'){ return afterPoint(i+1,len,str);// afterPoint用於判斷小數點後的字元是否符合 } if(str[i] == 'e' || str[i] == 'E'){ return afterE(i+1,len,str);
// afterPoint用於判斷e後字元是否符合 } if( str[i] < '0' || str[i] > '9'){ return false; //非首位若出現ASCI小於'0'或者大於'9'的字元,即要是0-9之間,不滿足返回false } } return true; } //小數點後只能是數字或者科學表示式的組合 如 3.2e-10;a為小數點後一位 public boolean afterPoint(int a,int len,char[] str){ //小數點後無數字,或者不在0-9之內均返回false if(len-a == 0 || str[a] < '0' || str[a] > '9'){ return false; } //小數點後第二位可以是數字也可以是科學計數法 for(int i = a+1 ; i < len ; i++){ //非數字或e均報錯 if(str[i] == 'e' || str[i] == 'E'){ return afterE(i+1,len,str); } if(str[i] < '0' || str[i] > '9'){ return false; } } return true; } //判斷首次出現e之後的情況,a為e後一位 public boolean afterE(int a,int len,char[] str){ //e處於最後一位時報錯 if(len-a == 0){ return false; } for(int i = a; i < len ; i++){ //正負號只能出現在e之後第一位 if(str[i] == '+' || str[i] == '-'){ if(i != a){ return false; }else continue; } if(str[i] < '0' || str[i] > '9'){ return false; } } return true; } }

在這裡插入圖片描述