需求:验证qq是否合法:5-15位,不能以0开头,全是数字
一般做法(不使用正则表达式):
private static boolean checkQQ(String qq) {
int len = qq.length();
if (len >= 5 && len <= 15) {
if (!qq.startsWith("0")) {
try {
long num = Long.parseLong(qq);
} catch (NumberFormatException e) {
System.out.println(qq + "号含有字母");
return false;
}
} else {
System.out.println(qq + "号以0开头了");
return false;
}
} else {
System.out.println(qq + "号的长度不合法");
return false;
}
return true;
}
重构后:
private static boolean checkQQ(String qq) {
int len = qq.length();
if (len < 5 || len > 15) {
System.out.println(qq + "号的长度不合法");
return false;
}
if (qq.startsWith("0")) {
System.out.println(qq + "号以0开头了");
return false;
}
try {
long num = Long.parseLong(qq);
} catch (NumberFormatException e) {
System.out.println(qq + "号含有字母");
return false;
}
return true;
}
说明:
这里采用的就是《重构》一书中提到的:以卫语句取代嵌套条件表达式。
条件表达式中通常有两种表达形式。第一种形式是:所有分支都属于正常行为。第二种形式是:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况。
如果是第一种形式,则使用if else;如果是第二种情况,一般是某种条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。