Java 我可以在开关盒中匹配表达式的不同部分吗?
我试图使用switch语句将字符串的一部分与不同的值进行匹配 我的问题是,我需要匹配的字符串部分长度不同,下面的示例描述了我正在尝试做的事情Java 我可以在开关盒中匹配表达式的不同部分吗?,java,string,switch-statement,Java,String,Switch Statement,我试图使用switch语句将字符串的一部分与不同的值进行匹配 我的问题是,我需要匹配的字符串部分长度不同,下面的示例描述了我正在尝试做的事情 String s = "ABC"; switch(s) { case s.substring(0,1).equals("A"): //Do something break; case s.substring(0,2).equals("AB"):
String s = "ABC";
switch(s) {
case s.substring(0,1).equals("A"):
//Do something
break;
case s.substring(0,2).equals("AB"):
//Do something else
break;
default:
//Do something other than else
break;
}
我曾尝试使用java.util.regex
,但无法真正理解如何实现它
附加问题:只使用一系列if语句会更好吗?我希望能够轻松有效地扩展条件。您可以在此处使用String#matches
和if-else逻辑:
if (s.matches("ABC.*")) {
// do something
{
else if (s.matches("AB.*")) {
// do something else
}
else if (s.matches("A.*")) {
// do something else
}
else {
// no match
}
请注意,我们首先检查更具体的匹配,然后回退到捕获不太具体的匹配。如果我们按相反的顺序进行检查,那么
ABC
和ABD
都将以A
逻辑开头,并且不会发生更具体的匹配。如果您希望始终从一开始就匹配,那么您可以使用String.startWith()执行此操作有多种方法,但我认为使用If else可以保持简单。还要确保您的执行顺序和优先级正确,最好使用正则表达式。这将是简单而有效的。你不能用开关状态来实现这一点。请注意,在你的示例中,第二个条件永远不会被计算为真,因为“AB”将始终与第一个检查匹配。我还认为一系列if语句也可以。也许在某个时候,你想要执行“所有匹配”,而切换要困难得多。对,你的注释是非常正确的。谢谢因此,从长远来看,在这里使用if-else语句而不是case?@shuda-Under-the-hood,Java的case
语句可能是使用if
和else
实现的。不,if-else在这里没有什么错,只是我们失去了case
带来的语法糖分。