java - 解析字符串 "((1/2)/3/)4"和其他类似字符串的好方法

标签 java string parsing optimization

假设我有四个数字 A、B、C、D。

有四种数学方法可以通过中间的运算符来排列它们。对于我的示例,我将使用除法运算符,但运算符可以是任何东西。

((A/B)/C)/D

A/(B/(C/D))

(A/(B/C))/D

A/((B/C)/D)

(A/B)/(C/D)

如果数字为 1、2、3、4,则结果将分别为 0.0416、0.375、0.375、6、0.666。

如果字符串是

因此,如果我将 A、B、C 和 D 替换为任何数字,并将除法运算符替换为任何运算符,我该如何解析它才能给出正确的结果?

我这样做的方法是使用 switch 语句,并让哪个运算符位于某些字符串索引处,这有效,但仅适用于第一个,其中括号并不重要。我可以为五种不同组合中的每一种创建 5 种不同的解析方法,但似乎会有更好的方法,而且我的方法似乎会变得非常笨拙,因为我必须使用嵌套的 switch 语句。

例如,如果字符串是

012345678910

“A/((B/C)/D))

我会在 5 处的 char 处应用一个 switch 语句。然后对 B 和 C 进行操作,并将该变量存储到 X 中。然后在 char 8 处应用一个 switch 语句,应用于 D,存储在 Y 中,在 1 处切换,应用,打印结果。然后重复这 40 行代码 5 次,改变一些东西。

这是最好的方法还是有更好的方法?

谢谢!

最佳答案

这是一个经典问题。如果您注意到语言本身就实现了这一点。 您可能想阅读调车场算法 https://en.wikipedia.org/wiki/Shunting-yard_algorithm

关于java - 解析字符串 "((1/2)/3/)4"和其他类似字符串的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262453/

相关文章:

java.sql.SQLException : Unknown initial character set index '255' received from server for connector 8. 0.11

java - JVM 解释与 JIT 编译。 JVM 不将字节码编译为机器可读吗?

python - 删除不需要的字符并在 Python 中转换为 int

python - 如何像 python 中的字符串一样索引 C 中的字符串?

c++ - 具有 Boost Spirit 的 OBJ 解析器 - 忽略注释

java - Log4j2 - 除 Spring 之外的调试级别日志记录

python 映射与字符串

正则表达式:提取字符串中两个标签之间的子字符串

jQuery 似乎没有自动解析 JSON

java - 如何使用vertx调用外部API并将数据返回到java对象