1. 本题知识点
正则表达式
2. 题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串 “+100”, “5e2”, “-123”, “3.1416” 和 “-1E-16” 都表示数值。 但是 “12e”, “1a3.14”, “1.2.3”, “±5” 和 “12e+4.3” 都不是。
3. 解题思路
使用正则表达式匹配字符串,表示数值的字符串可以分为三个部分:
-
正负号部分:字符串开头的正负号,可正可负,也可以没有。
[+-]?
-
数字部分:包括整数和小数。
\\d*\\.?\\d+
- 如果字符串只包含整数,使用
\\d+
匹配 - 如果有小数,使用
\\d*\\.?\\d+
匹配,之所以使用\\d*
是因为.123
也是小数
- 如果字符串只包含整数,使用
-
科学计数法部分:这一部分可以有,也可以没有。
([eE][+-]?\\d+)?
综合以上三个部分的正则表达式,最后得出完整的正则表达式:
[+-]?(\\d*\\.?\\d+)([eE][+-]?\\d+)?
4.代码
public class Solution {
public boolean isNumeric(char[] str) {
return new String(str).matches("[+-]?(\\d*\\.?\\d+)([eE][+-]?\\d+)?");
}
}