Java 我可以用带此参数的字符串执行switch语句吗?
因此,我需要实现一个switch语句,该语句在给定命令时使用。这些命令类似于“end”或“B”。然而,其中一个命令的设置类似于“S1”或“S6”,即程序中稍后引用某个内容后的int。我可以为所有其他命令执行switch语句吗?同时也可以为“S”+int命令执行switch语句吗?这意味着它将转到switch语句中以“S”开头的部分,而不管后面的数字是多少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(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();
};
(当然,您可以将所有逻辑都放在basedoStuff()
中,而不必为每个枚举值重写它,如果您的情况更好的话。)
然后您的应用程序代码可以执行以下操作
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]
,对吗?:)