如果下一个标记与任何指定的字符串不匹配,如何抛出InputMismatchException?

时间:2013-03-09 19:38:37

标签: java exception

我知道如果下一个标记与“A”匹配,Scanner.next("A")将返回字符串“A”,否则它将抛出InputMismatchException。但是我的代码需要以这样的方式,如果它找不到一组字符串中的任何匹配,它将抛出InputMismatchException。例如,如果“A”,“B”和“C”都不是下一个标记,我希望抛出InputMismatchException

1 个答案:

答案 0 :(得分:2)

您可以将Scanner.next(Pattern)与正则表达式一起使用:

Pattern pattern = Pattern.compile("[ABC]");
myScanner.next(pattern);

甚至

myScanner.next("[ABC]");

因为,根据Javadoc,Scanner.next(String)

  

调用next(pattern)形式的此方法的行为   与下一次调用的方式完全相同(Pattern.compile(pattern))。

您甚至不必担心带next(String)的版本每次都会构建一个Pattern对象,因为该实现维护了Pattern对象的缓存。

编辑:如果您要匹配的字符串不是单个字符,那么正则表达式模式就会有所不同:

myScanner.next("(AB|CD|EF)"); // throws for everything except AB, CD and EF.