使用字符串标记生成器时,如果标记是分隔符,如何检查标记之后的下一个字符?

时间:2018-02-11 01:02:13

标签: java string delimiter stringtokenizer

比如说我有一个字符串,其中包含以下内容" 3 * x +(b [3] + c)+ x"

我的分隔符是" \ T * + - /()[]"

当我使用字符串标记生成器来分割字符串并且我得到令牌&#34; b&#34;时,我如何检查以确保下一个分隔符是&#34; [&#34;。< / p>

我需要这样做,以便令牌&#34; x&#34;与token&#34; b&#34;不同,因为标记x表示一个简单变量,标记b表示我正在尝试构建的程序中的数组。

我正在尝试用Java编写这段代码。

1 个答案:

答案 0 :(得分:0)

  

使用字符串标记生成器时,如果标记是分隔符,如何检查标记之后的下一个字符?

如果对StringTokenizer使用3 argument constructor,则第三个参数表示分隔符是否作为标记返回。

然而 1 ,这仍然会让你遇到处理空白的尴尬问题。例如&#34; 1 + 1&#34;给你3个代币,但是&#34; 1 + 1&#34;给你5个代币。你要么:

  • 选择更好的方式 2 来标记输入,
  • 过滤掉任何空格&#34;令牌&#34;在开始分析它们之前,或
  • 在对其进行标记之前从输入字符串中删除任何空格。

1 - 我倾向于同意@EJP StringTokenizer是这项工作的错误工具。你可以让它发挥作用,但IMO你不应该这样做。 (除非你明确指示这样做。)

2 - 更好的方法可能是StreamTokenizerString.split(使用涉及前瞻或后瞻的狡猾的正则表达式),使用ANTLR,javacc或其他一些解析器生成器生成的标记生成器,或者..一个手工构建的标记器。