我正在与StreamTokenizer
一起解析文本,因此我需要确保
某些标记之间有空白。例如,“ 5 + 5”是非法的,但“ 5 + 5”是有效的。
我真的不太了解StreamTokenizer
。我阅读了API,但是找不到任何可以帮助我的东西。我怎样才能做到这一点?
最佳答案
您必须将空格设置为“普通字符”。这意味着它们将自己作为令牌返回,但不会折叠成其他令牌。例:
StreamTokenizer st = new StreamTokenizer(new StringReader("5 + 5"));
st.ordinaryChar(32);
int tt = st.nextToken(); // tt = TT_NUMBER, st.nval = 5
tt = st.nextToken(); // tt = 32 (' ')
tt = st.nextToken(); // tt = 43 ('+')
tt = st.nextToken(); // tt = 32 (' ')
tt = st.nextToken(); // tt = TT_NUMBER, st.nval = 5
tt = st.nextToken(); // tt = TT_EOF
不幸的是,您必须在解析器中处理空白令牌。我建议您滚动自己的令牌生成器。除非您快速而又肮脏地进行操作,否则StreamTokenizer几乎总是错误的选择。