在switch case语句中使用方法

时间:2016-03-11 20:53:56

标签: java if-statement methods switch-statement

我想知道你是否可以使用' contains()'等方法。在开关盒的情况下。我试图将以下if语句转换为switch case:

String sentence;
if(sentence.contains("abcd")){
// do command a
}
else if(sentence.contains("efgh")){
// do command b
}
else if(sentence.contains("ijkl")){
// do command c
}
else{
//do command d
}

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:1)

实际上你可以改变这个,如果进入开关,但它有点不可读:

()

答案 1 :(得分:0)

不,因为case常量必须是:

  • 常量表达
  • 或与switch表达式相同类型的枚举器名称。

方法调用既不是这些。

来自Java Language Specification, section 14.11: The switch statement

  

每个case标签都有一个case常量,它是常量表达式或枚举常量的名称。

答案 2 :(得分:0)

是的,假设您使用的是JDK 7或更高版本,则可以使用switch语句获得相同的代码。 JDK 7 introduced the ability to allow String objects as the expression in a switch statement。与调用 equals 方法的if-then-else语句链相比,这通常会产生更高效的字节码。

String pattern;
String sentence;

if (sentence.contains(pattern))
{
    switch (pattern)
    {
        case "abcd":

            // do command a
            break;

        case "efgh":

            // do command b
            break;

        case "ijkl":

            // do command c
            break;

        default:

            // do command d
            break;
    }
}

请注意,这仅适用,因为包含方法需要 String 对象,而 String 对象现在在switch语句中有效。你不能概括它来处理任意类型的对象。

答案 3 :(得分:-1)

不,你不能。 case语句只能比较被“切换”的东西的值。事实上,java只是'最近'开始支持字符串上的switch语句,因为它们是对象而不是原始的。通常,switch语句仅适用于基元。据我所知,唯一的例外是Strings