getText()返回完整的语句,不包括单词之间的空格。考虑空间的一种方法是将它们包括在语法中。但是,有没有其他方法可以获得考虑了空格的完整String。
答案 0 :(得分:4)
是的,有(假设你在使用ParserRuleContext.getText()
。想法是向输入字符串流询问一系列字符。位置值存储在上下文的开始和停止标记中。 / p>
这里有一些代码(从C ++转换而来,因此可能不是100%正确):
string sourceTextForContext(ParseTree context) {
Token startToken = (context.start instanceof TerminalNode) ? (TerminalNode)(start).getSymbol() : (ParserRuleContext)(start).start;
Token stopToken = (context.stop instanceof TerminalNode) ? (TerminalNode)(stop).getSymbol() : (ParserRuleContext)(stop).start;
CharStream cs = start.getTokenSource().getInputStream();
int stopIndex = stop != null ? stop.getStopIndex() : -1;
return cs.getText(new Interval(start.getStartIndex(), stopIndex));
}
由于此检索函数使用绝对char索引,因此它不会计入任何可能的空格规则。