我正在与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几乎总是错误的选择。

09-05 03:07