java - 将 if-else 转换为 switch 语句 java
问题描述
我正在尝试为地址解析器创建 switch 语句,该语句通过正则表达式解析字符串,但我遇到了困难。
我的挑战是这部分:
if(m.matches() && i==0){
b.street(m.group(1));
break;
如何把它变成
switch(SOMETHINGHERE) {
case SOMETHINGHERE: SOMECODE HERE
}
这是正则表达式和patternList,它是一个Arraylist(或Linkedlist,我还没有决定:
static String streetReg = "([a-zæøåäöëüéèA-ZÆØAÄÖËÜÉÈ -./]*)";
static String symbolsReg = "[ ,.-]*";
public static void addPatterns() {
patternList.add(Pattern.compile(streetReg + "" + symbolsReg));
}
如何将以下内容转换为 switch 语句?
public static Address parse(String s) {
addPatterns();
Builder b = new Builder();
boolean noMatch = false;
for(int i = 0; i<patternList.size(); i++){
Matcher m = patternList.get(i).matcher(s);
if(m.matches() && i==0){
b.street(m.group(1));
break;
}
else if(m.matches() && i==1){
b.street(m.group(1));
b.city(m.group(2));
break;
}else if(m.matches() && i==2) {
b.postcode(m.group(1));
b.city(m.group(2));
break;
}else if(m.matches() && i== 3){
b.street(m.group(1));
b.house(m.group(2));
b.city(m.group(3));
break;
我试过这样做:
switch (s){
case "st":
b.street(m.group(1));
break;
case "street and house":
b.street(m.group(1));
b.street(m.group(2));
break;
case "noMatch":
noMatch =true;
break;
}
}
if(noMatch)return null;
else return b.build();
}
但我收到一个错误,即为开关选择的类型和大小写不匹配。例如 boolean vs int 或 string vs int ..
解决方案
if ( m.matches()) {
switch(i) {
case 0: b.street(m.group(1));
checkNewVariable = true;
break; // WARNING!! this break is a break for the switch, not for the FOR loop
// you'll need to add a variable (checkNewVariable) so you can break after the switch if needed
case 1: b.street(m.group(1));
b.city(m.group(2));
checkNewVariable = true;
break;
// ... rest of your cases
}
if ( checkNewVariable ) { break; } // to break out of the for loop
}
是一种选择。
推荐阅读
- node.js - 无法在 imap append 中设置“To”和“Subject”标头
- c++ - 我应该在 catch (exception& e) 之后写 catch (...) 吗?
- google-cloud-platform - 删除 Google 存储桶作为负载均衡器后端的大小写敏感性
- three.js - 在 Threejs 中不可见的运行场景时添加到组对象的网格
- java - 为什么 JDA 返回 NullPointerException?
- docker - 将 docker 镜像部署到 heroku
- c++ - 布尔函数总是返回 False
- android - 从资产文件夹(Android)将图像加载到 ImageView 时出现“动画器只能在 Looper 线程上运行”错误
- c# - 如何为 NewtonSoft 类的一个实例创建多个 PropertyName
- express - 无法使用 socket io 2.2.0 加入房间