我正在尝试采用表示完整代数表达式的字符串,例如 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/