上一文中实现eval方法如下
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine se = manager.getEngineByName("js");

本文实现该方法,将字符串转成运算符(菜鸟一个,大佬们多多指点)
 1 public static String calcul(String arg){
 2         /**
 3          * 将String 转成运算式
 4          */
 5         //list 为出现符号的坐标
 6         List list = new ArrayList();
 7         //list1 乘除优先级为2,加减优先级为1
 8         List list1 = new ArrayList();
 9         //list2 取数
10         List list2 = new ArrayList();
11 
12         for(int i=0;i<arg.length();i++){
13             if(arg.substring(i,i+1).equals("+") || arg.substring(i,i+1).equals("-") ){
14                 list.add(i);
15                 list1.add(1);
16             }else if(arg.substring(i,i+1).equals("*") || arg.substring(i,i+1).equals("/")){
17                 list.add(i);
18                 list1.add(2);
19             }
20         }
21 
22         // list2取数转成double
23         for(int i=0;i<=list.size();i++){
24             if(i==0){
25                 list2.add(Double.valueOf((arg.substring(0,(int)list.get(i)))));
26             }else if(i==list.size()) {
27                 list2.add((Double.valueOf(arg.substring((int)list.get(i-1)+1))));
28             }else {
29                 list2.add((Double.valueOf(arg.substring((int)list.get(i-1)+1,(int)list.get(i)))));
30             }
31 
32         }
33         //计算乘除
34         for(int i=0;i<list1.size();i++){
35             if((int)list1.get(i)==2){
36                 double b=0;
37                 String s = arg.substring((int)list.get(i),(int)list.get(i)+1);
38                 if(s.equals("*")){
39                     b = (double)list2.get(i) * (double)list2.get(i+1);
40                 }else if(s.equals("/")){
41                     b = (double)list2.get(i) / (double)list2.get(i+1);
42                 }
43                 list1.set(i,-1);
44                 list2.set(i,b);
45                 list2.set(i+1,b);
46 
47             }
48         }
49 
50 
51 
52         //list3 取剩余的数,list4取加减后(未避免多个加减号周围不是想要的值)
53         List list3 = new ArrayList();
54         List list4 = new ArrayList();
55         for(int i=0;i<list1.size();i++){
56             if((int)list1.get(i)==1){
57                 double b=0;
58                 String s = arg.substring((int)list.get(i),(int)list.get(i)+1);
59                 if(s.equals("+")){
60                     list4.add("+");
61                 }else if(s.equals("-")){
62                     list4.add("-");
63                 }
64                 if(i==0 ){
65                     list3.add((double)list2.get(i));
66                 }else  if(i==list1.size() -1){
67                     list3.add((double)list2.get(i+1));
68                 }else{
69                     list3.add((double)list2.get(i));
70                     list3.add((double)list2.get(i+1));
71                 }
72             }
73         }
74         //计算加减
75         double c = 0;
76         for(int i=0;i<list4.size();i++){
77             String s1 = list4.get(i).toString();
78             if(s1.equals("+")){
79                 c = (double)list3.get(i) + (double)list3.get(i+1);
80 
81             }else if(s1.equals("-")){
82                 c = (double)list3.get(i) - (double)list3.get(i+1);
83             }
84             list3.set(i,c);
85             list3.set(i+1,c);
86         }
87 //        System.out.println(list2);
88 //        System.out.println(list3);
89 //        System.out.println(list4);
90 
91         return String.format("%.2f", list3.get(list3.size()-1));
92     }
View Code

相关文章: