Использование 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 для получения дополнительной информации.