当前位置: 首页 > 知识库问答 >
问题:

Java:在switch-case中获取字符串值而不考虑大小写敏感性

凌钊
2023-03-14

我有一些字符串(字符串结果),用户插入它在应用程序中没有任何大小写敏感策略用户可以插入,如:“fail”或“fail”或“fail”或“success”或“success”等。而且我只有一个方法用于它们,如fail()、success()和must call related method

现在,我想通过使用以下常量(成功、失败、...)将一个字符串使用到开关大小写语句中:

  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大小写,比如:“success”,因为它们必须以Pascal大小写模式在DB上保持

3-而且我认为我不能使用equalIgnoreCase()方法来处理这种情况,因为这不是if语句。

打倒你。

共有1个答案

宁侯林
2023-03-14

把逻辑分开一点。首先将状态转换为and Enum,该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;
}
 类似资料:
  • 问题内容: 为每个对象提供一种方法,因此给一个类似 一个人可以像 如果传递给的字符串与现有值不匹配(区分大小写),则将引发an 。 要进行不区分大小写的匹配,可以在枚举内编写自定义方法,例如 假设方法是在编译时隐式添加到类中,是否有任何通用方法可以不编写值或任何其他额外对象的缓存,而只编写一次上述方法(例如,不是每个方法)? 这种“通用” 方法的签名将类似于该方法,即: 并且它将为任何对象完全实现

  • 在执行MySQL 数据库给数据表改名时,发现报错,如下: 从提示中可以看出 blog_comment,表已经存在,可登录 MySQL 客户端查看数据表,并没有看到这张表。 提示中所说目标表并不存在。手动执行改名SQLRENAME TABLE blog_Comment TO blog_comment;,报同样错误:Table 'blog_comment' already exists。 从网上找一些

  • 本文向大家介绍Java中Switch Case使用字符串,包括了Java中Switch Case使用字符串的使用技巧和注意事项,需要的朋友参考一下 Java 7的引入增强了Switch的case,即它也支持字符串。 首先,设置一个字符串- 现在,在switch中使用相同的字符串,如下所示- 示例 现在,像平常使用SWITCH CASE一样检查每个字符串是否使用大小写。以下是在Switch Case

  • 如果在不同的目录中写入两个具有相同不区分大小写名称的公共Java类,那么这两个类在运行时都不可用。(我在Windows、Mac和Linux上测试了HotSpot JVM的几个版本。如果有其他JVM可以同时使用,我不会感到惊讶。(例如,如果我创建一个名为的类和一个名为的类,如下所示: 我的网站上提供了三个包含上述代码的eclipse项目。 如果尝试我调用在两个类上像这样: typechecker成功

  • 问题内容: 这是我的mysql表的架构,即时通讯使用mysql 5 需要敏感的UNIQUE KEY大小写, 它应该允许输入类似(’a’,0)&(’A’,0)的值 尝试将排序规则更改为latin_1和latin_generic_ci 问题答案: 最简单的是在DDL语句上添加, SQLFiddle演示

  • 问题内容: 默认情况下,django的url解算器似乎执行区分大小写的搜索来解析url,并区分’/ Login’和’login’。我的网址格式如下。 谁能指导我,如何使Django URL不区分大小写? 问题答案: 只需放在每个字符串的开头,即: 告诉每个RE不区分大小写地匹配