我知道Scanner.next("A")
如果下一个标记与“A”匹配,它将返回字符串“A”,否则它将抛出 and InputMismatchException
。但是我的代码需要采用某种方式,InputMismatchException
如果它无法从一组字符串中找到任何匹配项,它就会抛出。例如,InputMismatchException
如果“A”、“B”和“C”都不是下一个标记,我想被抛出。
问问题
117 次
1 回答
2
您可以将Scanner.next(Pattern)与正则表达式模式一起使用:
Pattern pattern = Pattern.compile("[ABC]");
myScanner.next(pattern);
甚至
myScanner.next("[ABC]");
因为,根据 Javadoc,Scanner.next(String)
调用 next(pattern) 形式的此方法的行为与调用 next(Pattern.compile(pattern)) 完全相同。
您甚至不必担心版本next(String)
每次都会构建一个 Pattern 对象,因为实现维护了一个 Pattern 对象的缓存。
编辑:如果您要匹配的字符串不是单个字符,则正则表达式模式会有所不同:
myScanner.next("(AB|CD|EF)"); // throws for everything except AB, CD and EF.
于 2013-03-09T19:42:00.180 回答