Java 将if-else转换为switch语句

Java 将if-else转换为switch语句,java,parsing,if-statement,design-patterns,switch-statement,Java,Parsing,If Statement,Design Patterns,Switch Statement,我试图为地址解析器创建switch语句,该解析器通过正则表达式解析字符串,但我在使用它时遇到了困难 我的挑战是这一部分: if(m.matches() && i==0){ b.street(m.group(1)); break; 如何把它变成 switch(SOMETHINGHERE) { case SOMETHINGHERE: SOMECODE HERE } 这是正则表达式和模式列表,它是Arraylist(或Linkedli

我试图为地址解析器创建switch语句,该解析器通过正则表达式解析字符串,但我在使用它时遇到了困难

我的挑战是这一部分:

if(m.matches() && i==0){
            b.street(m.group(1));
            break;
如何把它变成

switch(SOMETHINGHERE) {
case SOMETHINGHERE: SOMECODE HERE
}
这是正则表达式和模式列表,它是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;
但是我得到一个错误,为开关选择的类型与大小写不匹配。例如,布尔值vs int或字符串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
}

是一个选项。

s在
switch(s)
s的可能副本是来自公共静态地址解析的s(字符串s)。我知道如何使用字符串进行切换,但我不确定如何转换:if(m.matches()&&I==0){b.street(m.group(1));break;到开关(某物){case某物:}@leroyjenkins显示了您在转换iti后尝试的整个方法的代码!我不确定开关采用的参数是什么(s或m.matches()或i)!!是否可以使公共静态无效addPatterns(){patternList.add(Pattern.compile(streetReg+“”+symbolsReg));}作为linkedlist而不是arraylist?我假设是。开关可以将s作为参数,但不能将m.matches()作为参数(这将返回一个布尔值).i也是一个选项。我只是从您的原始代码开始,并以此为基础。从您的代码中,我可以看到您当前检查的i值,而不是s。我基本上是试图使此函数与具有不同模式的输入字符串匹配。如果模式匹配,它将使用给定的信息创建Address对象。
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
}