Java 我可以用带此参数的字符串执行switch语句吗?

Java 我可以用带此参数的字符串执行switch语句吗?,java,switch-statement,Java,Switch Statement,因此,我需要实现一个switch语句,该语句在给定命令时使用。这些命令类似于“end”或“B”。然而,其中一个命令的设置类似于“S1”或“S6”,即程序中稍后引用某个内容后的int。我可以为所有其他命令执行switch语句吗?同时也可以为“S”+int命令执行switch语句吗?这意味着它将转到switch语句中以“S”开头的部分,而不管后面的数字是多少 switch(command) { case "B": .... break; case "S

因此,我需要实现一个switch语句,该语句在给定命令时使用。这些命令类似于“end”或“B”。然而,其中一个命令的设置类似于“S1”或“S6”,即程序中稍后引用某个内容后的int。我可以为所有其他命令执行switch语句吗?同时也可以为“S”+int命令执行switch语句吗?这意味着它将转到switch语句中以“S”开头的部分,而不管后面的数字是多少

switch(command) {
    case "B":
        ....
        break;
    case "S" + %d (???):  // I know this won't work, just trying to convey the idea
        ....
        break;
}

不可以。如果这种切换方式是正确的(如果经常不正确,您可能想看看富枚举在这种情况下有多大帮助),那么您可以尝试以下方法:

switch (command.charAt(0)) {
    case 'B':
        ....
        break;
    case 'S':
        switch (command.chatAt(1)) {
            case '0':
                ....
                break;
        }
        ....
        break;
}
本文解释了向枚举添加方法,这可能会在这种情况下导致更可读的应用程序代码。这里有几个关于堆栈溢出的好例子;看看你的答案

例如:

public enum CommandType {
    B {
        @Override
        public Object doStuff() {
            ...
        }
    },
    ...
    S1 {
        @Override
        public Object doStuff() {
            ...
        }
    },
    ...
    S6 {
        @Override
        public Object doStuff() {
            ...
        }
    }

    public abstract Object doStuff();
};
(当然,您可以将所有逻辑都放在base
doStuff()
中,而不必为每个枚举值重写它,如果您的情况更好的话。)

然后您的应用程序代码可以执行以下操作

Enum.valueOf(CommandType.class, command).doStuff();

自Java 7以来,
switch
语句中的大小写标签可以是
String
s。当然,
开关
表达式也必须是
字符串
。但是,大小写标签必须是常量
String
s,因此不支持
“s”+%d(??)
或类似的格式

但是,如果您只需要处理一个特殊情况命令,那么您可能可以在
默认情况下处理它:

switch(command) {
    case "B":
        ....
        break;
    case "FOO":
        // ...
        break;
    default:
        if (command.startsWith("S")) {
            // ...
        } else {
            // whatever ...
        }
        break;
}

不,您不能这样做。您必须在
默认值中处理它:
。可能可以使用默认大小写(没有其他大小写匹配)然后在那里执行正则表达式检查。您的意思是
命令。charAt(0)
而不是
命令[0]
,对吗?:)