Sword to Offer-20 表示数值的字符串 ❀❀
in Algorithm
- 题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解题思路:
1、正则表达式规则如下: []字符集合,指此处可出现集合中存在的任意字符;
()分组;
?重复0-1次;
+重复1-n次;
*重复0-n次;
.任意字符;
\\.转义后的.;
\\d数字
2、构成数字的规则:
正负号,小数部分(.d),指数部分(e+3),指数部分的符号(+-)都只能不出现或出现一次;
整数部分数字出现0-n次,可以不出现,小数和指数部分数字出现1-n次,至少要有一次。
AC代码:
// String Stands for a Value or Not
public class Solution {
public boolean isNumeric(char[] str) {
if (str == null || str.length == 0) {
return false;
}
return new String(str).matches("[+-]?[\\d]*(\\.[\\d]+)?([eE][+-]?[0-9]+)?");
}
}
补充说明:
注意:数学问题,先分区域,再根据规则从外到里写。
这里是牛客编码链接