嗨,您好
我正在建立自己的StreamTokenizer来满足我的需求。
就像java的StreamTokenizer一样,我有一个nextToken()方法,该方法返回一个整数,该整数表示找到的数据类型。
我想做的是,如果令牌与我使用的任何正则表达式模式都不匹配,它将以整数代码形式返回令牌本身。例如,令牌“ $”将导致返回一个数字,以使println(number)将打印$。
我不知道该怎么做,有人吗?

谢谢!

最佳答案

如果要从一堆正则表达式构建词法分析器,请查看解析器生成器,例如ANTLR

如果您确实想手动滚动,则可以始终使用以下惯用法:

// Matches tokens foo and bar
Pattern myTokenDefinition = Pattern.compile("^(?:foo|bar)");

public boolean hasNext() {
  return sourceText.length() != 0;
}

public String next() {
  if (sourceText.length() != 0) {
    Matcher m = myTokenDefinition.matcher(sourceText);
    String token;
    if (m.find()) {
      token = m.group();
    } else {
      token = sourceText.substring(0, 1);
    }
    sourceText = sourceText.substring(token.length());
    return token;
  }
  throw new NoSuchElementException();
}

关于java - 用Java构建自己的StreamTokenizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5486588/

10-11 17:54