java - 以字符串格式标记代数表达式

标签 java

我正在尝试采用表示完整代数表达式的字符串,例如 x = 15 * 6/3 ,这是一个字符串,并将其标记为各个组件。所以第一个是 x,然后是 =,然后是 15,然后是 *、6、/,最后是 3。

我遇到的问题实际上是解析字符串并查看各个字符。如果没有大量的 if 语句,我想不出一种方法来做到这一点。当然,必须有更好的方法来具体定义每个单独的案例并对其进行测试。

最佳答案

对于每种类型的 token ,您需要弄清楚如何识别:

  • 当您开始阅读特定标记时
  • 如果您继续阅读同一个标记,或者您已经开始阅读另一个标记

让我们举个例子:x=15*6/3。假设您不能相信每个标记之间有空格这一事实。在那种情况下,这很简单:当您到达一个空间时,您的新 token 就开始了。

您可以将字符类型分解为字母、数字和符号。我们将 token 类型称为变量、运算符和数字。

一个字母表示变量 token 已经开始。它会一直持续到您阅读非字母为止。

符号表示运算符(operator) token 的开始。我只看到单个符号,但您可以让符号组对应于不同的运算符标记。

一个数字表示数字标记的开始。 (现在让我们假设整数。)数字标记会一直持续到您读取非数字为止。

基本上,这就是一个简单的符号解析器的工作原理。现在,如果您添加负数(其中“-”符号可以有多种含义)、括号或函数名称(如 sin(x)),那么事情会变得更复杂,但它的数量遵循同一套规则,现在只是有了更多选择。

关于java - 以字符串格式标记代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157559/

相关文章:

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'org.springframework.security.filterChains' :

java - 如何让java的随机生成器在构造函数语句中生成 double for变量?

java - 将 ActionListener 添加到 JGraphX 中的 mxcell

java - 如何使用java执行CMD命令?

java - 数组索引超出 JSwing 和 2D 数组的范围

java - Pong 游戏运行速度太快,且带有 FPS 计数器

java - 这个数组列表可以等于 null 吗?

java - Jquery 数据表与 Java Json 不起作用

java - volatile 与非 volatile

java - 在 Eclipse 中克隆 git 存储库