首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中以大小写形式使用字符串

在java中以大小写形式使用字符串
EN

Stack Overflow用户
提问于 2012-04-20 13:02:17
回答 11查看 348.5K关注 0票数 60

在检查if时,我需要将以下switch-case更改为String,以提高圈复杂度。

代码语言:javascript
复制
String value = some methodx;
if ("apple".equals(value)) {
    method1;
}

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

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

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

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-04-20 13:09:44

Java (版本7之前)不支持switch/case中的字符串。但是您可以通过使用枚举来实现所需的结果。

代码语言:javascript
复制
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...
}
票数 172
EN

Stack Overflow用户

发布于 2012-04-20 13:09:35

学习使用else

由于value永远不会同时等于两个不相等的字符串,因此只有5种可能的结果--一个对应于您关心的每个值,另一个对应于“以上任何一个都不是”。但是,因为您的代码不会消除无法通过的测试,所以它有16个“可能”路径(2 ^测试数量),其中大多数永远不会被遵循。

对于else,唯一存在的路径是实际可能发生的5个路径。

代码语言:javascript
复制
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;
}

或者开始使用JDK7,它包括在switch语句中使用字符串的能力。当然,Java会将switch编译成类似if/else的结构……

票数 20
EN

Stack Overflow用户

发布于 2012-04-20 15:10:01

要降低圈复杂度,请使用map:

代码语言:javascript
复制
Map<String,Callable<Object>> map = new HashMap < > ( ) ;
map . put ( "apple" , new Callable<Object> () { public Object call ( method1 ( ) ; return null ; } ) ;
...
map . get ( x ) . call ( ) ;

或多态

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10240538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档