java 字符串表达式计算值

本文介绍如何在Java中解析和计算字符串表达式的值,涉及字符串到数学表达式的转换及运算符优先级处理。
摘要由CSDN通过智能技术生成
//解析表达式
	public static String getResult(String expr) throws Exception {
		try {
		    System.out.println("计算"+expr);
		    /*数字栈*/
		    Stack<BigDecimal> number = new Stack<BigDecimal>(); 
		    /*符号栈*/
		    Stack<String> operator = new Stack<String>();
		    operator.push(null);// 在栈顶压人一个null,配合它的优先级,目的是减少下面程序的判断
		
		    /* 将expr打散为运算数和运算符 */
		    Pattern p = Pattern.compile("(?<!\\d)-?\\d+(\\.\\d+)?|[+\\-*/()]");// 这个正则为匹配表达式中的数字或运算符
		    Matcher m = p.matcher(expr);
		    while(m.find()) {
		        String temp = m.group();
		        if(temp.matches("[+\\-*/()]")) {//遇到符号
		            if(temp.equals("(")) {//遇到左括号,直接入符号栈
		                operator.push(temp);
		                System.out.println("符号栈更新:"+operator);
		            }else if(temp.equals(")")){//遇到右括号,"符号栈弹栈取栈顶符号b,数字栈弹栈取栈顶数字a1,数字栈弹栈取栈顶数字a2,计算a2 b a1 ,将结果压入数字栈",重复引号步骤至取栈顶为左括号,将左括号弹出
		                String b = null;
		                while(!(b = operator.pop()).equals("(")) {
		                    System.out.println("符号栈更新:"+operator);
		                    BigDecimal a1 = number.pop();
		                    BigDecimal a2 = number.pop();
		                    System.out.println("数字栈更新:"+number);
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值