当前位置: 首页 > 知识库问答 >
问题:

在java的开关案例中使用字符串

陆安国
2023-03-14

在检查字符串时,我需要将以下if更改为开关-大小写,以提高圈复杂度。

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

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

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

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

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


共有3个答案

汪博艺
2023-03-14

现在每个人都在使用至少Java7,对吗?这是最初问题的答案:

String myString = getFruitString();

switch (myString) {

    case "apple":
        method1();
        break;

    case "carrot":
        method2();
        break;

    case "mango":
        method3();
        break;

    case "orange":
        method4();
        break;
}

笔记

  • case语句相当于使用String.equals
  • 和往常一样,字符串匹配是区分大小写的。
  • 根据文档,这通常比使用链式if-其他语句(如cHows的回答)更快。
董高洁
2023-03-14

学会使用其他

因为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只需将开关编译if/else之类的构造。。。

韩喜
2023-03-14

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

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...
}
 类似资料:
  • 我的应用程序未确认JDK 1.8。我试图使用一个带有字符串的开关盒作为开关。仅使用JavaDocs中的一个基本示例是的,我可以切换到if/else语句,但我不愿意。 我得到了,这意味着我使用的是旧版本的Java。。这不合理,因为我有jdk1。已安装8.0_11。 这会是我的Gradle档案中的一个问题吗?

  • 案例1 自定义一个具有字符串替换功能的函数 使用for循环从指定位置遍历字符串“Good morning” 用字符串“evening”中的字符逐一替换原串 主函数中调用字符串替换函数 最后将替换后的字符串输出到屏幕上 #include <stdio.h> char * MyReplace(char *s1, char *s2, int pos) //自定义的替换函数 { int i, j;

  • 问题内容: 是否可以在switch语句中使用关系运算符(<,<=,>,> =)? 上面的例子(显然)不起作用 问题答案: 你不能。 从jls-14.11 关系运算符(<,<=,>,> =)导致并且不允许这样做。 以下所有条件必须为真,否则会发生编译时错误: 与switch语句关联的每个case常量表达式都必须可分配给开关Expression的类型(第5.2节)。 与switch语句关联的大小写常量

  • 问题内容: 为什么在切换情况下无法将枚举值用作字符串?(或者这有什么问题:) 问题答案: 您只能使用编译时已知的字符串。编译器无法确定该表达式的结果。 也许你可以尝试

  • 这是我的代码: 如果年龄是15岁会发生什么?嗯,它给了我一个错误。所以我想知道是否有可能在案例中包含一个条件。例如, 我可以使用if语句,但我想知道是否可以使用开关。