42. Java 使用 String 作为 switch 表达式的类型

73 阅读3分钟

42. Java 使用 String 作为 switch 表达式的类型

使用 String 作为 switch 表达式的类型

Java SE 7 开始,switch 语句支持使用 String 类型作为选择器变量。这让我们在处理字符串时,不再需要使用多个 if-else 语句,可以直接使用 switch,使得代码更加简洁和易于维护。

switch 语句中,String 值与每个 case 标签进行比较,就像使用 String.equals() 方法一样。为了避免因大小写差异引起的匹配问题,通常会将 String 转换为统一的大小写(例如,使用 toLowerCase()toUpperCase())。


示例:根据月份名称返回月份编号

假设我们有一个 String 类型的变量 month,表示月份名称。我们可以用 switch 语句来返回对应的月份编号。

String month = ...; // 任何月份的名称
int monthNumber = -1;

switch (month.toLowerCase()) { // 转换为小写后进行比较
    case "january":
        monthNumber = 1;
        break;
    case "february":
        monthNumber = 2;
        break;
    case "march":
        monthNumber = 3;
        break;
    case "april":
        monthNumber = 4;
        break;
    case "may":
        monthNumber = 5;
        break;
    case "june":
        monthNumber = 6;
        break;
    case "july":
        monthNumber = 7;
        break;
    case "august":
        monthNumber = 8;
        break;
    case "september":
        monthNumber = 9;
        break;
    case "october":
        monthNumber = 10;
        break;
    case "november":
        monthNumber = 11;
        break;
    case "december":
        monthNumber = 12;
        break;
    default: 
        monthNumber = 0; // 如果输入的月份无效,则返回 0
        break;
}

System.out.println("Month number is: " + monthNumber);

解释 📝

  • month.toLowerCase():我们使用 toLowerCase()month 转换为小写,以确保 switch 语句可以忽略大小写的差异。这样无论用户输入 "January"、"january"、"JANUARY" 或其他大小写组合,都可以正确匹配。
  • case 标签:每个 case 标签包含一个字符串(例如 "january"),并与 month 变量进行比较。如果 month 的值与某个 case 标签匹配,就执行该分支的代码。
  • default 标签:如果 month 的值不是任何有效的月份名称,default 部分会执行,并将 monthNumber 设置为 0。✅

示例输出 📊

假设 month 的值为 "March",程序的输出将是:

Month number is: 3

为什么使用 String 类型的 switch? 🤔

  • 简洁性:与多个 if-else 语句相比,switch 语句处理多个字符串比较时更加简洁。
  • 可读性switch 语句使得多个条件判断更加清晰,避免了多个 if 判断带来的重复。
  • 性能:在有很多 case 标签的情况下,switch 的性能通常比多个 if-else 更好,因为它可能通过查找表优化执行路径。🚀

注意事项 ⚠️

  • 大小写问题:为了避免因大小写差异导致匹配失败,通常会先将 String 转换为统一的小写或大写(例如,使用 toLowerCase()toUpperCase())。这样可以确保所有的字符串比较都不受大小写影响。
  • String 支持String 类型的 switch 语句和其他类型(如整数、枚举等)类似,允许通过多个 case 标签对比不同的字符串值。

总结 📝

  • switch 语句:从 Java SE 7 起,switch 语句支持使用 String 类型作为选择器变量。这使得处理字符串变得更加方便,避免了使用多个 if-else 语句。
  • 统一大小写:为了避免因大小写差异导致匹配失败,建议将 String 转换为统一的大小写。
  • 简洁与可读性switch 语句比多个 if-else 更简洁,且可读性更高,尤其在处理多个条件判断时。

总体来说,使用 String 类型的 switch 语句是一种更加高效且易于维护的方式,尤其在你需要处理多个字符串比较时。🎯