package demo_0100;public class Test { /* * ((((2+3)/5)*2)-2) * * * ((2+3)/(5*2)-2) */ public static void main(String[] args) { String str="((((2+3)/5)*2)-2)"; /* * * ((((2+3) * * (((5/5)*2)-2) */ System.out.println("length:"+str.length()); int left=0; for(int i=0; i<str.length(); i++){ String temp=str.substring(i, i+1); if(temp.equals(")")){ //找到第一个 )括号 String str2=str.substring(0, i); //找到最后一个左括号 int lastLeftIndex=str2.lastIndexOf("("); //截取最内层口号(2+3)的字符串 String numStr=str2.substring(lastLeftIndex+1); //定义存储计算结果的变量 int numSum=0; //===============================计算================================ for(int j=0; j<numStr.length(); j++){ //-------------------------------------------------------------- String str3=numStr.substring(j, j+1); if(str3.equals("+")){ int leftNum=Integer.parseInt(numStr.substring(0, j)); int rightNum=Integer.parseInt(numStr.substring(j+1)); numSum=leftNum+rightNum; break; }else if(str3.equals("-")){ }else if(str3.equals("*")){ }else if(str3.equals("/")){ } //-------------------------------------------------- } //===========================使用计算的结果替换截取的字符串======================================= str=str.replace("("+numStr+")", numSum+""); System.out.println("替换之后:"+str); } } System.out.println("left:"+left); }}
1 回答
已采纳
阿旭_
TA贡献217条经验 获得超353个赞
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class test { public static void main(String[] args) throws Exception { String[] value_arr = new String[] { "((((2+3)/5)*2)-2)", "((2+3)/(5*2)-2)" }; for (int i = 0; i < value_arr.length; i++) { ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); System.out.println(value_arr[i] + "=" + jse.eval(value_arr[i])); } } }
添加回答
举报
0/150
提交
取消