Использование регулярных выражений для оператора switch в Java - PullRequest
16 голосов
/ 11 ноября 2011
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;
        }
    }
}

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

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

Ответы [ 2 ]

31 голосов
/ 11 ноября 2011

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

6 голосов
/ 11 ноября 2011

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

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

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

...