【发布时间】:2024-05-20 11:50:02
【问题描述】:
我正在尝试为地址解析器创建 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..
【问题讨论】:
-
switch (s)中的's'是什么@ -
s 将是来自公共静态地址解析(字符串 s)的 s
-
我知道如何使用 String 进行切换,但我不确定如何转换: if(m.matches() && i==0){ b.street(m.group(1 ));休息;到一个开关 (SOMETHING) { case SOMETHING: }
-
@leroyjenkins 显示转换后您尝试的整个方法的代码
标签: java parsing if-statement design-patterns switch-statement