题目:剑指offer20题。
题解
字符串匹配!用正则表达式来做
Java中String类支持正则表达式匹配 String.matches()函数,这道题恰好就可以用正则匹配来做。
当然手动地设计好匹配规则,自己写匹配也行,但是这样做题速度会更慢。
不要想什么简单方法,一步步来就行。
规则:
- 根据数据样例,先梳理清楚能表示数值的字符串有哪些情况,然后指定正则表达式。
- 正则表达式比较灵活,而且容易出错,一旦出错都不知道怎么检查,建议将情况划分后分别写正则表达式。
分类、匹配(进入正题):
- 我这里把数字分为正常数字(不含e/E)和科学计数法数字
- 分别制定规则进行匹配,匹配成功即返回true。
- 当然数据样例也没包括所有的数据组成情况,需要我们自己再完善匹配规则。
Java代码
//class
public boolean isNumber(String s) {
//至少有一个数字,e前要有数字
if (s == null || s.length() == 0 || !s.matches(".*\\d.*")) {
//必须包含数字
return false;
}
s = s.trim();//空格处理
if (s.contains("e") || s.contains