Java Switch Case匹配大小写不敏感输入后输出标准case名称的问题
没问题,我来帮你搞定这个需求!核心就是要把匹配到的标准小写名称单独存下来,最后输出这个存好的值就行,给你两种实用的方案:
方案1:在Case分支中直接记录标准名称
这种方法最直接,适合case数量不多的场景。我们新增一个变量来存储匹配到的标准小写名,每个case分支里给这个变量赋值对应的标准名称,最后输出它代替原始输入的name:
String standardName = null; // 对应你代码里的break loop;,假设这里有外部循环 loop: while (true) { String name = "JoHn"; // 示例输入 int salary = 0; switch (name.toLowerCase()) { case "john": salary = 12; standardName = "john"; // 记录标准名称 break loop; case "jack": standardName = "jack"; case "jonathen": salary = 6; if (standardName == null) standardName = "jonathen"; // 给jonathen单独赋值 break loop; default: System.out.println("\n\tWrong Name Dude!"); break; } } if (standardName != null) { System.out.print(standardName); // 输出标准小写名,示例中会打印"john" }
说明:
- 新增
standardName变量专门存储匹配到的标准名称,每个有效case分支都给它赋值对应的小写字符串 - 如果像
jack和jonathen这种共享逻辑的case,可以分别赋值,确保输出对应的标准名 - 最后判断
standardName不为空时输出,避免错误场景下输出无效内容
方案2:用Map映射实现更易维护的写法
如果后续需要添加更多名称,用Map来维护“输入小写值→标准名称”的映射会更简洁,避免在多个case里重复赋值:
// 先定义映射关系:key是小写匹配值,value是对应的标准名称 Map<String, String> nameToStandardMap = new HashMap<>(); nameToStandardMap.put("john", "john"); nameToStandardMap.put("jack", "jack"); nameToStandardMap.put("jonathen", "jonathen"); // 对应你代码里的break loop;,假设这里有外部循环 loop: while (true) { String name = "JACK"; // 示例输入 int salary = 0; String lowerName = name.toLowerCase(); if (nameToStandardMap.containsKey(lowerName)) { String standardName = nameToStandardMap.get(lowerName); // 处理薪资逻辑 switch (lowerName) { case "john": salary = 12; break loop; case "jack": case "jonathen": salary = 6; break loop; } System.out.print(standardName); // 输出标准名,示例中会打印"jack" } else { System.out.println("\n\tWrong Name Dude!"); } }
说明:
- 把所有需要匹配的名称和对应的标准名存在Map里,后续新增或修改时只需要调整Map即可,不用改动switch逻辑
- 先判断输入的小写形式是否在Map中,存在就取出标准名称,再处理薪资逻辑,最后输出标准名
内容的提问来源于stack exchange,提问作者Anjula Serasinghe
相关产品推荐
相关产品推荐

