题目:表示数值的字符串
- +100、5e2、-123、3.1416、0123都表示数字,12e、1a3.14、1.2.3、+-5、-1E-16、12e+5.4都不表示数值。
- 思路:
- 使用java.util.regex.Pattern包下的Pattern.matches方法匹配表达式规则。
- "^...$"代表正则表达式的开头和结尾
- [-+]?代表+/-号可选,?表示出现0次或1次
- 每两个表达式之间要多加一个\来表示分割,所以\d其实等价于\d的功能,多余的一个\仅用于分隔位置
- \d*代表0个或多个[0-9]之间的数字
- \d+代表1个或多个[0-9]之间的数字
- (?:...)?表示非捕获型分组,功能类似于||,就是可以匹配这个表达式,也可以不匹配这个表达式
- 本题正则表达式的规则:
- 首先是可选的+-号,出现0次或1次,[+-]?
- 数字之后才能加小数点,且小数点只能出现一次。一种是前面有数字,那就随便其后跟不跟小数点;如果前面没有数字,那么小数点之后必须要跟数字,不然会出现只有一个小数点的情况
- e/E只能出现一次,而且出现后不能跟带小数点的数字,只能跟正/负整数。
- 代码:
class Solution {
public boolean isNumber(String s) {
//String pattern = "^[+-]?\\d*(?:\\.\\d*)?(?:\\[eE][+-]?\\d+)?$";
String pattern1 = "^[+-]?((\\d+\\.?)|(\\d*\\.\\d+))([eE][+-]?\\d+)?$";
return s.trim().matches(pattern1);
}
}