递归思路:根据四则运算的优先级,优先级低的先拆分,再对拆分的字符串带入方法进行递归,直到不存在*/+-运算符。
import java.util.Scanner;
public class ArithmeticRules3 {
public static String computeString(String str, int type) {
String result = null;
String[] strs = null;
String regexCheck = ".*(\\*|\\/|\\+|\\-).*";
if(!str.matches(regexCheck)) {
return str;
}
strs = str.split(type == 1?"\\+":
type == 2?"\\-":
type == 3?"\\*":
type == 4?"\\/":"");
//以防出现首位出现负数导致拆分出空字符串,
//从而在转换成double类型时抛出empty string异常
result = strs[0].isEmpty()?"0":strs[0];
for(int i=1; i
if(strs[i].isEmpty()) strs[i] = "0";
double d1 = Double.parseDouble(computeString(result,type+1));
double d2 = Double.parseDouble(computeString(strs[i],type+1));
if(type == 1)
return d1 + d2 + "";
if(type == 2)
return d1 - d2 + "";
if(type == 3)
return d1 * d2 + "";
if(type == 4)
return d1 / d2 + "";
}
return computeString(result,type+1);
}
}