很多人都会编写一些小程序之类的,比如说计算器,涉及到计算器那么就要说说运算的优先级了,比如先算乘除法,后算加减法,如果有括号,先说括号里边的,这些都是小学数学了,今天分享一篇Java解析运算的代码。
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TestDemo {
public static void main(String[] args) {
String str = "2*3*6+10/2";
char[] chars = str.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if (Character.isDigit(chars[i])) {
sb.append(chars[i]);
} else {
sb.append(",").append(chars[i]).append(",");
}
}
List<String> list = Stream.of(sb.toString().split(",")).collect(Collectors.toList());
System.out.println(splitStepCalculate(list).get(0));
}
public static List<String> splitStepCalculate(List<String> cls) {
if(cls.size() == 1) {
return cls;
}
//计算乘除法
for(int i=0;i<cls.size();i++) {
if(i<cls.size() && cls.get(i).equals("*")) {
calculate(cls, i,"*");
i=0;
}
if(i<cls.size() && cls.get(i).equals("/")) {
calculate(cls, i,"/");
i=0;
}
}
//计算加减法
for(int i=0;i<cls.size();i++) {
if(i<cls.size() && cls.get(i).equals("+")) {
calculate(cls, i,"+");
i=0;
}
if(i<cls.size() && cls.get(i).equals("-")) {
calculate(cls, i,"-");
i=0;
}
}
return cls;
}
private static void calculate(List<String> cls, int i,String symbol) {
int s = Integer.valueOf(cls.get(i-1));
int e = Integer.valueOf(cls.get(i+1));
int t = 0;
if(symbol.equals("*")) {
t = s * e;
}else if(symbol.equals("/")) {
t = s / e;
}else if(symbol.equals("+")) {
t = s + e;
}else if(symbol.equals("-")) {
t = s - e;
}
cls.set(i, t+"");
cls.remove(i-1);
cls.remove(i);
}
}
有问题可以在下方评论,技术问题可以私聊我。