表示數值的字符串

普通方法(沒研究):

鏈接:https://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
來源:牛客網

public static boolean isNumeric(char[] str) {
        int point = 0;//記錄小數點個數
        int i = 0;//遍歷str數組用的下標
        int eFlag = 0;//e/E出現的次數
        //判斷第一個字符是不是符號,是的話後續的判斷就跳過一個數
        if(str[0] == '-' || str[0] == '+' ) {   
            i++;
        }
         
        for (; i<str.length; ++i) {
            if(str[i] == '+' || str[i] == '-'){
                //出現字符,若此字符的前一個字符不是e/E則認爲是多出來的符號
                if (str[i-1] != 'e' && str[i-1] != 'E')
                    return false;
                continue;
            }
            
            if(str[i] == 'e' || str[i] == 'E') {
                eFlag++;
                if(eFlag > 1)//e/E不能出現兩次
                    return false;
                //若e/E的前一個字符不是數字,或者e/E出現字符串的第一個或者最後一個,都認爲是錯的
                if(i-1<0 || str[i-1] <48 || str[i-1] >57 || i+1>str.length-1 )
                    return false;
                point++;
                continue;
            }
             
            if (str[i] == '.') {//小數點數字不能超過兩個
                ++point;
                if (point > 1) {
                    return false;
                }
                continue;
            }
            //出現非數字且不是e/E則認爲是錯的(小數點和符號在前面的判斷裏用“continue”跳過了)
            if ((str[i] < 48 || str[i] > 57) && (str[i] != 'e') && (str[i] != 'E'))
                return false;
             
        }
       return true;
}

正則表達式法:

public class Solution {
    public boolean isNumeric(char[] str) {
        if(str == null || str.length == 0)
            return false;
        String s = String.valueOf(str);
        return s.matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");
    }
}

 

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

例如:

  • runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 號代表前面的字符必須至少出現一次(1次或多次)。

  • runoo*b,可以匹配 runob、runoob、runoooooob 等,* 號代表字符可以不出現,也可以出現一次或者多次(0次、或1次、或多次)。

  • colou?r 可以匹配 color 或者 colour,? 問號代表前面的字符最多只可以出現一次(0次、或1次)。

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