Подтвердить что ты не робот

Использование regex для switch-statement в Java

void menu() {
    print();
    Scanner input = new Scanner( System.in );
    while(true) {
        String s = input.next();
        switch (s) {
        case "m": print(); continue;
        case "s": stat(); break;
        case "[A-Z]{1}[a-z]{2}\\d{1,}": filminfo( s ); break;
        case "Jur1": filminfo(s); break; //For debugging - this worked fine
        case "q": ; return;
        }
    }
}

Кажется, что либо мое регулярное выражение выключено, либо я не использую его правильно в case-statement. То, что я хочу, это строка, которая: начинается с одной буквы в верхнем регистре и за ней следуют ровно две строчные буквы, за которыми следует хотя бы одна цифра.

Я проверил API регулярных выражений и попробовал три варианта (жадные, неохотные и притяжательные кванторы), не зная их правильного использования. Также проверили методы для String, не найдя метод, который, как мне кажется, соответствовал моим потребностям.

4b9b3361

Ответ 1

Вы не можете использовать регулярное выражение как случай переключения. (Подумайте об этом: как бы Java узнала, хотите ли вы совместить строку "[A-Z]{1}[a-z]{2}\\d{1,}" или регулярное выражение?)

Что вы могли бы сделать в этом случае, это попытка сопоставить регулярное выражение в вашем случае по умолчанию.

    switch (s) {
        case "m": print(); continue;
        case "s": stat(); break;
        case "q": return;
        default:
            if (s.matches("[A-Z]{1}[a-z]{2}\\d{1,}")) {
                filminfo( s );
            }
            break;
    }

(BTW, это будет работать только с Java 7 и более поздними версиями). Пока не переключение строк.)

Ответ 2

Я не думаю, что вы можете использовать регулярное выражение в случаях переключения.

Строка в выражении switch сравнивается с выражениями связанных с меткой каждого случая, как если бы метод String.equals был используется.

Подробнее см. http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html.