字符串作为switch语句[重复]

Posted

技术标签:

【中文标题】字符串作为switch语句[重复]【英文标题】:String as switch statement [duplicate] 【发布时间】:2012-01-23 05:37:35 【问题描述】:

可能重复:Switch Statement with Strings in Java

我试图在 String 上使用 switch 语句,但它给出了编译错误。如果有人建议我如何在 switch-case 语句中使用 String,这将对我有所帮助。

【问题讨论】:

字符串不能在 Java 的 switch 语句中使用。 @Walkerneo 自 Java7 以来不正确。这也是建议的解决方法:使用最新版本。 【参考方案1】:

如果你真的很想使用 switch 语句,有一种方法。 创建一个包含 switch 语句案例的枚举类

public enum MustUseSwitch
    value1,
    value2,
    value3;

然后使用枚举切换语句。

switch(MustUseSwitch.valueOf(stringVariable))
    case value1:
        System.out.println("Value1!");
        break;
    case value2:
        System.out.println("Value2!");
        break;
    case value3:
        System.out.println("Value3!");
       break;

【讨论】:

嗯,这显然与使用 String->integer 中的 hashmap 相同——尽管这是一个巧妙的技巧。【参考方案2】:

如前所述,你不能。技术细节可以参考compiling switches的规范。在 Java SE 7 中,此功能已实现。在 JDK 7 中使用 String 开关的示例,请参见 this page。

也许this question 也有帮助。

【讨论】:

【参考方案3】:

你不能。使用 if/else if/else if/else。除非你在 Java7 上。这个重复问题的答案可以比我解释得更好:https://***.com/a/338230/3333

【讨论】:

【参考方案4】:

不能直接使用字符串,但是可以做一个关键字符串数组,快速搜索,打开索引,像这样:

String[] sortedKeys = new String[] "alpha", "bravo", "delta", "zebra";
int keyIndex = Arrays.binarySearch(sortedKeys, switchKey);
switch(keyIndex) 
    case 0: // alpha
        break;
    case 1: // bravo
        break;
    case 2: // delta
        break;
    case 3: // zebra
        break;

【讨论】:

【参考方案5】:

您不能在switch 语句中使用String,但可以使用Enum 类型。使用Enum 比使用String 甚至public static final int MY_CONSTANT 要好得多。

你会在这里找到一个非常好的教程:Java Enum type tutorial

【讨论】:

以上是关于字符串作为switch语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章

switch语句中的表达式不能是字符串吗? C++ [重复]

switch语句

使用带有 Switch 语句的字符串? [复制]

我们可以在c中使用带有字符串的switch-case语句吗? [重复]

Java学习:switch语句使用的注意事项

019_增强switch语句