Использование 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, не найдя метод, который, как мне кажется, соответствовал моим потребностям.
Ответы
Ответ 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.