当前位置: 首页 > 面试题库 >

字符串与Java枚举的大小写不敏感匹配

哈涵容
2023-03-14
问题内容

Java``valueOf()为每个Enum<T>对象提供一种方法,因此给一个enum类似

public enum Day {
  Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

一个人可以像

Day day = Day.valueOf("Monday");

如果传递给的字符串valueOf()与现有Day值不匹配(区分大小写),IllegalArgumentException则将引发an 。

要进行不区分大小写的匹配,可以在Day枚举内编写自定义方法,例如

public static Day lookup(String day) {
  for (Day d : Day.values()) {
    if (d.name().equalsIgnoreCase(day)) {
      return type;
    }
  }
  return null;
}

假设方法是在编译时隐式添加到类中,是否有任何通用方法可以不编写值或任何其他额外对象的缓存,而只编写一次lookup()上述方法(例如,不是每个方法)?enum``values()``Enum<E>

这种“通用” lookup()方法的签名将类似于该Enum.valueOf()方法,即:

public static <T extends Enum<T>> T lookup(Class<T> enumType, String name);

并且它将Day.lookup()为任何对象完全实现该方法的功能enum,而无需为每个方法重写相同的方法enum


问题答案:

我发现获取泛型的特殊混合有些棘手,但这是可行的。

public static <T extends Enum<?>> T searchEnum(Class<T> enumeration,
        String search) {
    for (T each : enumeration.getEnumConstants()) {
        if (each.name().compareToIgnoreCase(search) == 0) {
            return each;
        }
    }
    return null;
}

public enum Horse {
    THREE_LEG_JOE, GLUE_FACTORY
};

public static void main(String[] args) {
    System.out.println(searchEnum(Horse.class, "Three_Leg_Joe"));
    System.out.println(searchEnum(Day.class, "ThUrSdAy"));
}


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

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

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

  • 我有一些字符串(字符串结果),用户插入它在应用程序中没有任何大小写敏感策略用户可以插入,如:“fail”或“fail”或“fail”或“success”或“success”等。而且我只有一个方法用于它们,如fail()、success()和must call related method 现在,我想通过使用以下常量(成功、失败、...)将一个字符串使用到开关大小写语句中: 请注意: 1-我不想为结

  • 问题内容: 我正在尝试考虑在PHP中实现不区分大小写的file_exists函数的最快方法。我最好的选择是枚举目录中的文件,并进行strtolower()与strtolower()的比较直到找到匹配项? 问题答案: 我使用注释中的源代码来创建此功能。返回完整路径文件(如果找到),否则返回FALSE。 在文件名中的目录名称上不区分大小写。

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