劍指Offer系列之「表示數值的字串」

HoryChang發表於2020-10-08

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

使用正規表示式就很容易

import java.util.regex.Pattern;
public class Solution{
  	public static boolean isNumeric(char[] str){
      	String s = new String(str);
      	String pattern = "^[+-]?\\d*(?:\\.\\d*)?(?:[Ee][+-]?\\d+)?$";
    }
}

^$框定正規表示式,它指引這個正規表示式對文字中的所有字元都進行匹配。如果省略這些標識,那麼只要一個字串中包含一個數字這個正規表示式就會進行匹配。如果僅包含 ^ ,它將匹配以一個數字開頭的字串。如果僅包含 $ ,則匹配以一個數字結尾的字串。

[-+]?

  • 正負號後面的?字尾表示這個負號是可選的,表示有0到1個負號或者正號

\\d*

  • \\d的含義和[0-9]一樣。它匹配一個數字。字尾 * 指引它可匹配零個或者多個數字。

(?:\\.\\d*)?

  • (?:…)?表示一個可選的非捕獲型分組。* 指引這個分組會匹配後面跟隨的0個或者多個數字的小數點。

(?:[eE][+\\-]?\d+)?

  • 這是另外一個可選的非捕獲型分組。它會匹配一個e(或E)、一個可選的正負號以及一個或多個數字。

相關文章