Java字符串转换成算术表达式(含括号)计算并输出结果的代码
乘号无法显示这个是算式
思路:根据优先级一步一步的计算,先()再乘除再加减.
给定一个字符串算式表达式:((789+66)3)+((123000021/23+3)-11)2
字符串先拿到最后一个‘(’,根据最后一个‘(’截取右侧所有字符串:123000021/23+3)-11)2。再根据截取出来的字符串截取‘)’以前的字符串,最终的到括号里面的字符串:123000021/23+3,再去判断乘除(乘除的优先级高)得到结果:25830000,将123000021置换为25830000得到25830000/23+3,调用自身直到算式中没有或者/。再计算±符号,同理一步步置换,第一个括号计算完成后再计算下一个括号。知道没有括号,得到简单的四则运算,继续调用一次乘除方法以及加减方法得到最终结果。
注意:正则表达式不会写。所以只能手动要求运算表达式必须规范,而且运算过程中不能出现负数。
代码如下:
package test;
import java.text.NumberFormat;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
//String str="((789+66)*3)+(((1230000-4)*21/23+3)-11)*2";//输入的字符串
Scanner sc = new Scanner(System.in);//控制台输入字符串
System.out.println("注意:计算过程中不能出现负数!");
System.out.println("表达式必须规范!");
System.out.println("请输入你所要计算的算式,回车结束: