1

我知道Scanner.next("A")如果下一个标记与“A”匹配,它将返回字符串“A”,否则它将抛出 and InputMismatchException。但是我的代码需要采用某种方式,InputMismatchException如果它无法从一组字符串中找到任何匹配项,它就会抛出。例如,InputMismatchException如果“A”、“B”和“C”都不是下一个标记,我想被抛出。

4

1 回答 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 回答