【发布时间】:2020-02-05 23:14:29
【问题描述】:
我有这样的方法
private boolean validGrade(final StringBuilder grade) {
boolean isValid = false;
String semester = "semester";
if ((grade.toString().contains("2o") && grade.toString().contains(semester))
|| (grade.toString().contains("4o") && grade.toString().contains(semester))
|| (grade.toString().contains("6o") && grade.toString().contains(semester))
|| (grade.toString().contains("8o") && grade.toString().contains(semester))) {
isValid = true;
}
}
我想用这样的方式替换它:
private boolean doValidGradoAntComp(final StringBuilder grade) {
boolean isValid = false;
switch (grade.toString()) {
case "2o semester":
isValid = true;
break;
case "4o semester":
isValid = true;
break;
case "6o semester":
isValid = true;
break;
case "8o semester":
isValid = true;
break;
default:
break;
}
return isValid;
}
我的疑问是: 哪一个更好? 两者的工作方式相同?
【问题讨论】:
-
您认为这两种方法是否相同?
contains不同,switch case 不同 -
我建议在条件之外设置值(在一些单独的布尔变量中。例如,
Boolean bool = grade.toString().contains(semester); -
好吧,我想说第二个选项更具可读性,因此不太容易出错。此外,它不需要多次调用
grade.toString()。但是,第一个变体允许比第二个变体更多的变体,即"something semester whatever 2o"将匹配contains("2o")和contains("semester")。 -
如果所有允许的变体都像上面的开关一样,您也可以在一行中完成:
boolean isValid = grade.toString().matches("[2468]o semester"); -
如何使用
static Set<String> sets,其中包含 ("2o", "4o", "8o"...)。然后使用sets.contains做判断过程。
标签: java performance methods switch-statement comparison