Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or
minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.Some examples:
"1 + 1" = 2 " 2-1 + 2 " = 3 "(1+(4+5+2)-3)+(6+8)" = 23可以设置一个符号,将其与数字相乘,来计算结果,数字可能不止一位数,所以要
多次判断。当遇到"("时,将之前的结果和符号位入栈,知道遇到")"。当前的结果
乘以入栈的符号位加入栈的结果就是result。
public int calculate(String s) {
if(s==null||s.length()<=0)
return 0;
int result=0;
int sign=1;
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c==' ')
continue;
if(Character.isDigit(c)){
int t=c-'0';
while(i+1<s.length()&&Character.isDigit(s.charAt(i+1)))
t=10*t+s.charAt(++i)-'0';
result+=sign*t;
}
else if(c=='-')
sign=-1;
else if(c=='+')
sign=1;
else if(c=='('){
stack.push(result);
result=0;
stack.push(sign);
sign=1;
}else if(c==')') {
result=stack.pop()*result+stack.pop();
sign=1;
}
}
return result;
}