有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果我调用scanner,我会扫描两次。先是下一个,然后是扫描仪。下一个

如果我调用scanner.hasNext(pattern),然后在java.util.Scanner上使用相同的模式scanner.next(pattern),我会扫描两次吗

假设我有很多案例的代码(试图制作一个lexer):

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();
   }
}

我的问题是:

  • hasNext(pattern)是否以某种方式缓存了搜索结果?所以它不会搜索同一个模式两次
  • 这比使用try { scanner.next(pattern) } catch { ... }慢还是快
  • 或者有没有一种更简单的方法(没有第三方库)基于regex模式进行标记化

共 (1) 个答案

  1. # 1 楼答案

    我认为答案是:

    文档并没有说明任何可能的事情,但可能没有


    另外,我问这个问题主要是因为我想用它来解析更复杂的东西,比如字符串文字,而不仅仅是空格分隔的标记。 发现扫描器仍然使用这种令牌,然后检查是否匹配。所以它现在对我的用例没有用了