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