英文:
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 {
// 没有匹配
}
请注意,我们首先检查更具体的匹配,然后回退到捕获不太具体的匹配。如果我们按相反的顺序检查,那么ABC
和ABD
都将被以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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论