我可以在switch case中匹配表达式的不同部分吗?

huangapple go评论76阅读模式
英文:

Can I match on different parts of an expression in a switch case?

问题

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

我的问题是,我需要匹配的字符串部分的长度是可变的,下面的示例描述了我的尝试:

String s = "ABC";

switch(s) {
    case s.substring(0,1).equals("A"):
        //做些什么
        break;
    case s.substring(0,2).equals("AB"):
        //做另一些事情
        break;
    default:
        //除了上述情况外的操作
        break;
}

我已经尝试过使用 java.util.regex,但实际上不太清楚如何实现它...

额外的问题:只使用一系列 if 语句会更好吗?我希望能够轻松有效地扩展条件。

英文:

I am trying to use a switch-statement to match a part of a string to different values.

My problem is that the part of string that I need to match varies in length, the example below is depicting what I am trying to do.

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;
}

I've tried to use java.util.regex but can't really figure out how to implement it..

Bonus question: Would it be better to just use a sequence of if statements? I want to be able to expand the conditions easily and effectively.

答案1

得分: 1

你可以在这里使用String#matches与if-else逻辑:

if (s.matches("ABC.*")) {
    // 做某事
} else if (s.matches("AB.*")) {
    // 做其他事情
} else if (s.matches("A.*")) {
    // 做其他事情
} else {
    // 没有匹配
}

请注意,我们首先检查更具体的匹配,然后回退到捕获不太具体的匹配。如果我们按相反的顺序检查,那么ABCABD都将被以A开头的逻辑捕获,而更具体的匹配将不会发生。

英文:

You could use String#matches here with if-else logic:

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
}

Note that we check for the more specific match first, and then fallback to capturing less specific matches. If we checked in the reverse order, then both ABC and ABD would be caught with the starts with A logic, and the more specific matches would not happen.

huangapple
  • 本文由 发表于 2020年9月23日 18:22:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/64025846.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定