Я знаю, что Scanner.next("A")
вернет строку «А», если следующий токен совпадает с «А», иначе он будет кидать и InputMismatchException
. Но мой код должен быть таким, чтобы он выбрасывал InputMismatchException
, если он не мог найти соответствия из группы строк. Например, я хочу, чтобы InputMismatchException
был выброшен, если ни один «A», ни «B», ни «C» не являются следующим токеном.Как бросить InputMismatchException, если следующий токен не соответствует ни одной из указанных строк?
1
A
ответ
2
Вы можете использовать Scanner.next(Pattern) с рисунком регулярных выражений:
Pattern pattern = Pattern.compile("[ABC]");
myScanner.next(pattern);
Или даже
myScanner.next("[ABC]");
Потому что, согласно Javadoc, Scanner.next(String)
Вызов этого метода из форма next (pattern) ведет себя в точно так же, как и вызов next (Pattern .compile (шаблон)).
Вам даже не нужно беспокоиться о том, что версия с next(String)
будет каждый раз создавать объект Pattern, поскольку реализация поддерживает кеш объектов шаблона.
Edit: Если строки, которые вы хотите, чтобы соответствовать не являются одиночными символами, то регулярное выражение будет просто разные:
myScanner.next("(AB|CD|EF)"); // throws for everything except AB, CD and EF.
Но это не будет работать, если струны Я ищу имеют более одного персонажа. Например, что, если я хочу увидеть, соответствует ли следующий токен «AB» или «CD» или «EF». –
Это регулярное выражение, вы можете делать много вещей (хотя и не все). Если шаблоны AB, CD и EF, вы должны использовать 'next (" (AB | CD | EF)); ". –