如果我调用 scanner.hasNext 然后调用 scanner.next,我会扫描两次吗

Do I scan twice if I call scanner.hasNext and then scanner.next

如果我调用 scanner.hasNext(pattern) 然后在 java.util.Scanner

上使用相同的模式调用 scanner.next(pattern) 是否会扫描两次

假设我有很多案例的这段代码(试图制作词法分析器):

import java.util.*;
import java.util.regex.Pattern;

public class MainClass {
   public static void main(String[] args) {
      Scanner scanner = new Scanner("Hello World! 3 + 3.0 = 6 ");

      Pattern a = Pattern.compile("..rld!");
      Pattern b = Pattern.compile("...llo");


      while(scanner.hasNext()) {
         if (scanner.hasNext(a)) {
            scanner.next(a);
            /*Do something meaningful with it like create a token*/
         }
         else if(scanner.hasNext(b)) {
            scanner.next(b);
         }
         /*...*/
      }


      // close the scanner
      scanner.close();
   }
}

我的问题是:

好的,所以我认为答案是:

文档没有说明任何可能,但也可能没有。


另外,我问这个问题主要是因为我想用它来解析更复杂的东西,比如字符串文字,而不仅仅是白色 space 分隔的标记。 并发现 Scanner 仍然采用此类令牌,​​然后检查它是否匹配。所以它现在对我的用例没用了。