之前写过一个计算表达式的算法,也是跟人学的:
先读取表达式字符串,然后分割成表达式数组,再做计算符号的比较排序,弄成后缀表达式,最后做计算。算法大概如下
private List<String> conversionExpression(String expressionStr) {
List<String> list = new ArrayList<String>();expressionStr = expressionStr.replace("(", ";(;");
expressionStr = expressionStr.replace(")", ";);");
expressionStr = expressionStr.replace("and", ";and;");
expressionStr = expressionStr.replace("or", ";or;");
expressionStr = expressionStr.replace("not", ";not;");
// 分割成表达式数组
StringBuilder stringBuilder = new StringBuilder();
String[] expressionStrs = expressionStr.split(";");
String[] newExpressionStrs = toSuffixExpression(expressionStrs);
for (int i = 0; i < newExpressionStrs.length; i++) {
stringBuilder.append(newExpressionStrs[i]);
list.add(newExpressionStrs[i]);
}
return list;
}