在java中使用开关大小写中的字符串

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

我需要将以下内容更改ifswitch- case同时检查一个String,以提高圈复杂度。

String value = some methodx;
if ("apple".equals(value)) {
    method1;
}

if ("carrot".equals(value)) {
    method2;
}

if ("mango".equals(value)) {
    method3;
}

if ("orange".equals(value)) {
    method4;
}

但我不确定我会得到什么价值。

提问于
用户回答回答于

Java(版本7之前)不支持switch / case中的String。但是你可以通过使用枚举来达到预期的效果。

private enum Fruit {
    apple, carrot, mango, orange;
}

String value; // assume input
Fruit fruit = Fruit.valueOf(value); // surround with try/catch

switch(fruit) {
    case apple:
        method1;
        break;
    case carrot:
        method2;
        break;
    // etc...
}
用户回答回答于

学会使用else

既然value永远不会等同于两个不相等的字符串,那么只有5个可能的结果 - 对于您关心的每个值都会有一个结果,另外一个针对“以上都不是”。但是因为你的代码并没有消除那些无法通过的测试,所以它有16个“可能”路径(测试次数的2倍),其中绝大多数将永远不会被遵循。

有了else,唯一存在的路径就是实际可能发生的5个路径。

String value = some methodx;
if ("apple".equals(value )) {
    method1;
}
else if ("carrot".equals(value )) {
    method2;
}
else if ("mango".equals(value )) {
    method3;
}
else if ("orance".equals(value )) {
    method4;
}

或者开始使用JDK 7,其中包括在switch语句中使用字符串的能力。当然,Java只是将它编译switch成一个if/ elselike结构......

扫码关注云+社区