Java 我可以在开关盒中匹配表达式的不同部分吗?

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"):

我试图使用switch语句将字符串的一部分与不同的值进行匹配

我的问题是,我需要匹配的字符串部分长度不同,下面的示例描述了我正在尝试做的事情

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
带来的语法糖分。