嗨,您好
我正在建立自己的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/