繁体   English   中英

Java:无论在 switch-case 中是否区分大小写,都可以获取字符串值

[英]Java: get string value regardless of case sensitivity in switch-case

我有一些字符串(字符串结果),用户在应用程序中插入它没有任何区分大小写的策略,用户可以插入,例如:“失败”或“失败”或“失败”和“成功”或“成功”等我也只有一种方法,例如:fail()、success() 并且必须调用相关方法

现在我想通过使用下面的常量(成功,失败,...)在 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()作为结果,因为我必须添加更多 case 语句。

2-我无法将我的 Constatn class 字段值更改为小写,它们必须是帕斯卡大小写,例如:“成功”,因为它们必须在帕斯卡大小写模式下准确地保留在 DB 上

3-我认为我不能在这种情况下使用equalIgnoreCase()方法,因为这不是 if 语句。

谢谢你。

把逻辑分开一点。 首先将您的状态转换为具有查找 function 的 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM