我正在使用StreamTokenizer
来解析文本,我需要确保这一点
某些令牌之间有空格。例如,“ 5 + 5 ”是非法的,但“ 5 + 5 ”有效。
我真的不清楚StreamTokenizer
那个;我读了API,但找不到任何帮助我的东西。我怎么能这样做?
答案 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
循环中处理更复杂的输入。