在java中构建我自己的StreamTokenizer

时间:2011-03-30 12:57:52

标签: java regex

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

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你想从一堆正则表达式构建词法分析器,请查看像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();
}