21xrx.com
2024-11-05 12:14:51 Tuesday
登录
文章检索 我的文章 写文章
我的Java字符串表达式计算实践
2023-06-13 12:30:57 深夜i     --     --
Java 字符串表达式 计算

我最近在学习Java,学到了计算字符串表达式的方法,因为有些场景下需要通过字符串计算得出结果。下面我就来简单分享一下Java计算字符串表达式的方法,欢迎大家参考。

首先,我们需要使用Java的Stack来实现后缀表达式的计算。将中缀表达式转化为后缀表达式,再通过栈进行计算。

下面给出代码实例:


import java.util.Stack;

public class Calculator {

  public static void main(String[] args) {

    Calculator calculator = new Calculator();

    String expression = "7+5*7-3";

    double result = calculator.calculate(expression);

    System.out.println("结果是:" + result);

  }

  public double calculate(String expression) {

    // 定义中缀表达式栈和后缀表达式栈

    Stack infixStack = new Stack<>();

    Stack suffixStack = new Stack<>();

    // 将中缀表达式转换为后缀表达式

    String[] items = expression.split("");

    for (String item : items) {

      if (item.matches("\\d+")) {

        // 数字直接加入后缀表达式栈

        suffixStack.push(item);

      } else if (item.matches("[\\+\\-\\*\\/]")) {

        // 如果是运算符,则加入中缀表达式栈

        infixStack.push(item);

      }

    }

    while (!infixStack.isEmpty()) {

      suffixStack.push(infixStack.pop());

    }

    // 计算后缀表达式结果

    Stack resultStack = new Stack<>();

    while (!suffixStack.isEmpty()) {

      String item = suffixStack.pop();

      if (item.matches("\\d+")) {

        resultStack.push(Double.parseDouble(item));

      } else {

        double num2 = resultStack.pop();

        double num1 = resultStack.pop();

        switch (item) {

          case "+":

            resultStack.push(num1 + num2);

            break;

          case "-":

            resultStack.push(num1 - num2);

            break;

          case "*":

            resultStack.push(num1 * num2);

            break;

          case "/":

            resultStack.push(num1 / num2);

            break;

        }

      }

    }

    return resultStack.pop();

  }

}

以上就是我的Java计算字符串表达式的实践经验分享,如果有更好的方法或代码实现,欢迎大家补充。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复