Java 我如何确保';是否使用StreamTokenizer设置特定标记之间的空白?

Java 我如何确保';是否使用StreamTokenizer设置特定标记之间的空白?,java,stream,Java,Stream,我正在使用StreamTokenizer解析文本,我需要确保 某些标记之间有空格。例如,“5+5”是非法的,但“5+5”是有效的 我真的不太清楚StreamTokenizer;我读了API,但找不到任何帮助。我该怎么做?您必须将空格设置为“普通字符”。这意味着它们将作为自己的代币返回,但不会折叠成其他代币。例如: StreamTokenizer st = new StreamTokenizer(new StringReader("5 + 5")); st.ordinaryChar(32); in

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

考虑改用
扫描仪
。例如:

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()
,可能是在
中的
循环中处理更复杂的输入。

StringTokenizer更易于使用。