java - 分解 Java 字符串中的复合算术表达式

标签 java

给定一个字符串

A + B * C / (D + E)

该算法会将字符串分解为二进制运算列表:

  • 添加 D 和 E(结果 #1)
  • 将 B 和 C 相乘(结果 #2)
  • 将结果 #1 除以结果 #2(结果 #3)
  • 将结果 #3 添加到 A

基本上,Java 等编程语言执行表达式的顺序。

解决此类问题的最佳方法是什么?

最佳答案

“最佳”方法是情人眼里出西施。一种相当常见且易于实现的方法是构建一个简单的 recursive descent parser请按照以下步骤操作:

  • 编写一个方法来“标记”您的表达式(即将其转换为运算符、操作数和括号的集合,例如 "A""+""B""*""C""/""(""D""+""E"")"
  • 定义一种方法,用于将顶级表达式处理为零个或多个加法或减法的序列
  • 定义一种将加法或减法处理为零个或多个乘法或除法序列的方法
  • 定义一种方法,将乘法或除法处理为零个或多个主表达式的序列
  • 定义将主表达式处理为变量或括在括号中的顶级表达式的方法

最后一点是理解递归下降解析的关键:每当遇到左括号时,都会回调处理顶级表达式的方法,然后验证处理后的下一个标记是否是右括号。

关于java - 分解 Java 字符串中的复合算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350546/

相关文章:

java - JFileChooser 不遵循外观

java - 无法确定引发 NullPointer 异常的原因

java - 套接字连接问题

java - 在 Java 中反序列化包含 __type 而不是 @class 的 JSON

Java Set 保留顺序?

java - java中if循环内的返回类型

java - 设置背景颜色时应用程序崩溃

java - 更新嵌入在 AbstractDocument 中的组件的属性

java - 要测试的正则表达式 '_'

java - 如何使用 osmdroid 的 OSM MAP Tile Packager