提问人:mi_mo 提问时间:4/5/2021 更新时间:4/5/2021 访问量:219
Java:获取字符串值,而不考虑 switch-case 中的区分大小写
Java: get string value regardless of case sensitivity in switch-case
问:
我有一些字符串(字符串结果),用户将其插入应用程序中,没有任何区分大小写的策略,用户可以插入,例如:“失败”或“失败”或“失败”和“成功”或“成功”等。而且我每个方法只有一个,例如:fail()、success()并且必须调用相关方法
现在我想通过使用以下常量(success,fail,...)将一个字符串放入 switch-case 语句:
public final class ActionResultStatus
{
public static final String SUCCESS = "Success";
public static final String FAIL = "Fail";
public static final String REJECTED = "Rejected";
public static final String IN_PROGRESS = "InProgress";
}
String result = userClass.getResult(); //UserClass is a container class for user inputted data
switch(result)
{
case ActionResultStatus.FAIL:
fail();
case ActionResultStatus.SUCCESS :
success();
}
请注意:
1-我不想使用或用于结果,因为我必须添加更多的案例陈述。toUpperCase()
toLowerCase()
2-我无法将我的 Constatn 类字段值更改为小写,它们必须是 pascal-case,如:“Success”,因为它们必须以 pascal-case 模式完全保留在 DB 上
3-我认为我不能在这种情况下使用方法,因为这不是 if-statement 。equalIgnoreCase()
呵
答:
3赞
Ryan
4/5/2021
#1
把逻辑分开一点。首先,将你的状态转换为具有查找函数的 Enum 来查找枚举:
public enum ActionResultStatus {
SUCCESS("Success"),
FAIL("Fail"),
REJECTED("Rejected"),
IN_PROGESS("InProgress"),
UNKNOWN("Unknown");
private String outputStr;
private ActionResultStatus(String output) {
outputStr = output;
}
public static ActionResultStatus findStatus(String input) {
for (ActionResultStatus status : values()) {
if (input.equalsIgnoreCase(status.outputStr)) {
return status;
}
}
return UNKNOWN;
}
public String toString() {
return outputStr;
}
}
然后,您的处理逻辑将变为:
ActionResultStatus status = ActionResultStatus.findStatus(userClass.getResult());
switch (status) {
case FAIL: fail(); break;
case SUCCESS: success(); break;
default: break;
}
上一个:比较可能无限的双精度数
评论
if-statement
switch
String result = userClass.getResult().toUpperCase();