1.题目
2.解法(正则表达式)
为了方便说明,所以把每个字符分开了
import java.util.regex.Pattern;
public class Solution {
public boolean isNumeric(char[] str) {
// ^和$框定正则表达式 [+-]只有括号内的字符才参与匹配,只匹配单个字符, ?代表+或者-只出现0次或者1次
String p1 = "^[+-]?";
// \d在java中有特殊含义所以要加转义字符\, \d代表[0-9], *表示数字出现0或者多次,例如-.123
String p2 = "\\d*";
/**
* \\.是因为.在正则表达式中,.代表任意字符,所以需要转义\.
* 因为\也是有特殊意义的字符(把后面的字符标记为特殊字符),
* 所以要再加一个\转义,所以为\\. 这个后面加?意思是小数点可以出现0次或者1次
* 非捕获分组 (?:) 只匹配子表达式,并不捕获结果
*/
String p3 = "(?:\\.\\d+)?";
// e或者E后面也可以不出现+或者-,所以后面加了?,但是E或者e后面必须有数字,所以加了\\d+
String p4 = "(?:[Ee][+-]?\\d+)?";
return Pattern.matches(p1 + p2 + p3 + p4, new String(str));
}
}
可以将上面的所有字符串连成一句:
String pattern = "^[+-]?\\d*(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?";