конвертировать if-else для переключения операторов java - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь создать операторы 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();
}

но я получаю ошибку, что тип, выбранный для коммутатора, и регистр не совпадают. например логическое значение против int или строка против int ..

1 Ответ

2 голосов
/ 21 марта 2019
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
}

Это вариант.

...