如何确保特定令牌与StreamTokenizer之间有空格?

时间:2011-03-29 21:27:34

标签: java stream

我正在使用StreamTokenizer来解析文本,我需要确保这一点 某些令牌之间有空格。例如,“ 5 + 5 ”是非法的,但“ 5 + 5 ”有效。

我真的不清楚StreamTokenizer那个;我读了API,但找不到任何帮助我的东西。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您必须将空格设置为“普通字符”。这意味着它们将自己作为代币返回,但不会折叠成其他代币。例如:

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

答案 1 :(得分:0)

请考虑使用Scanner。 E.g:

String input = "5 + 5";
Scanner scanner = new Scanner(input).useDelimiter(" ");
int num1 = scanner.nextInt();
String op = scanner.next();
int num2 = scanner.nextInt();

这是一个简化示例,假设输入为"5+5""5 + 5"。您应该随时检查scanner.hasNext(),可能在where循环中处理更复杂的输入。