2013-03-09 3 views
1

Я знаю, что Scanner.next("A") вернет строку «А», если следующий токен совпадает с «А», иначе он будет кидать и InputMismatchException. Но мой код должен быть таким, чтобы он выбрасывал InputMismatchException, если он не мог найти соответствия из группы строк. Например, я хочу, чтобы InputMismatchException был выброшен, если ни один «A», ни «B», ни «C» не являются следующим токеном.Как бросить InputMismatchException, если следующий токен не соответствует ни одной из указанных строк?

ответ

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. 
+0

Но это не будет работать, если струны Я ищу имеют более одного персонажа. Например, что, если я хочу увидеть, соответствует ли следующий токен «AB» или «CD» или «EF». –

+0

Это регулярное выражение, вы можете делать много вещей (хотя и не все). Если шаблоны AB, CD и EF, вы должны использовать 'next (" (AB | CD | EF)); ". –