Использование regex для switch-оператора в 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 regex и попробовал три варианта (жадные, неохотные и притяжательные кванторы), не зная их надлежащего использования. Также проверил методы для String, не найдя метод это казалось уместным для моих нужд.

2 ответов


вы не можете использовать регулярное выражение в качестве коммутатора. (Подумайте об этом: как 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;
    }

(кстати, это будет работать только с Java 7 и более поздних. До этого никто не включал струны.)


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

строка в выражении switch сравнивается с выражениями с каждым случаем связана метка, как будто строка.метод Equals были быть используемым.

см http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html для получения дополнительной информации.