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