題目描述
請實作一個函式用來判斷字串是否表示數值(包括整數和小數),
例如,字串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值,
但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是,
思路
正則運算式,
^ 和 美元符號框定正則運算式,它指引這個正則運算式對文本中的所有字符都進行匹配,
如果省略這些標識,那么只要一個字串中包含一個數字這個正則運算式就會進行匹配,
如果僅包含 ^ ,它將匹配以一個數字開頭的字串,如果僅包含$ ,則匹配>以一個數字結尾的字串,[-+]?正負號后面的 ? 后綴表示這個負號是可選的,表示有0到1個負號或者正號,
\\d*\d的含義和[0-9]一樣,它匹配一個數字,后綴 * 指引它可匹配零個或者多個數字,
(?:\\.\\d*)?(?: …)?表示一個可選的非捕獲型分組,* 指引這個分組會匹配后面跟隨的0個或者多個數字的小數點,
(?:[eE][+\\-]?\d+)?這是另外一個可選的非捕獲型分組,它會匹配一個e(或E)、一個可選的正負號以及一個或多個數字,
時間復雜度O(n),空間復雜度O(1),
代碼
import java.util.regex.Pattern;
public class Solution {
public boolean isNumeric(char[] str) {
String pattern = "^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$";
String s = new String(str);
return Pattern.matches(pattern,s);
}
}
筆記
java.util.regex.Matcher
java.util.regex.Pattern
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205860.html
標籤:其他
上一篇:正則運算式的匹配
