Java 通过正则表达式判断字符串是否为数值
刷题中遇到的一个思路,通过正则表达式来匹配字符串,省去了很多繁琐的条件判断,代码简洁。
但唯一的缺点就是不易读。
因此,特意记录学习一下。
1. 题目中“数值”的概念
数值(按顺序)可以分成以下几个部分: (1)若干空格; (2)一个小数或整数; (3)(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数; (4)若干空格;
其中,整数和小数的定义分别为:
小数(按顺序)可以分成以下几个部分: (1)(可选)一个符号字符(‘+’ 或 ‘-’); (2)下述格式之一: ① 至少一位数字,后面跟着一个点 ‘.’; ② 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字; ③ 一个点 ‘.’ ,后面跟着至少一位数字。、
整数(按顺序)可以分成以下几个部分: (1)(可选)一个符号字符(‘+’ 或 ‘-’); (2)至少一位数字。
2. 正则表达式描述
根据上述的定义,可以列出每一种情况下的小数匹配模式:
3. Java 代码
// 正则表达式匹配是否为数值
public static boolean isNumber(String s) {
boolean ans = false;
s = s.trim(); // 去除字符串前后的空格;
String pattern = "[+-]?((\d+\.?\d*){1}|(\d+\.?){1}|(\.{1}\d+){1}){1}([eE]{1}[+-]?\d+)?";
if(s.matches(pattern)) {
ans = true;
}
return ans;
}
