package 字符串算式;
import java.util.ArrayList;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="2*(3+5*(8+3))-8";
Stack<Object> stack=new Stack<>();
for(int i=0;i<str.length();++i){
if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
int x=Integer.valueOf(String.valueOf(str.charAt(i)));
if(stack.isEmpty()){
stack.push(x);
}else{
if((char)stack.peek()=='*'){
stack.pop();
int x1=(int) stack.pop();
stack.push(x1*x);
}
else if((char)stack.peek()=='/'){
stack.pop();
int x1=(int) stack.pop();
stack.push(x1/x);
}
else{
stack.push(x);
}
}
}
else {
if('('==str.charAt(i)){
stack.push('(');
}
else if(')'==str.charAt(i)){
ArrayList<Object> list=new ArrayList<>();
list.add(stack.pop());
while(true){
Object x= stack.pop();
if(x instanceof Character && (char)x=='(')
break;
list.add(x);
}
int result=getValue(list);
if(stack.isEmpty()){
stack.push(result);
}
else if((char)stack.peek()=='*'){
stack.pop();
int x1=(int) stack.pop();
stack.push(x1*result);
}
else if((char)stack.peek()=='/'){
stack.pop();
int x1=(int) stack.pop();
stack.push(x1/result);
}
else{
stack.push(result);
}
}
else{
stack.push(str.charAt(i));
}
}
}
ArrayList<Object> l=new ArrayList<>();
while(!stack.isEmpty()){
l.add(stack.pop());
}
System.out.println(getValue(l));
}
private static int getValue(ArrayList<Object> list) {
// TODO Auto-generated method stub
int sum=(int) list.get(list.size()-1);
Character pre=null;
for(int i=list.size()-2;i>=0;--i){
if(list.get(i) instanceof Character){
pre=(Character) list.get(i);
}
else{
if(pre=='+'){
sum=sum+(int)list.get(i);
}else if(pre=='-'){
sum=sum-(int)list.get(i);
}
}
}
return sum;
}
}
字符串算式
最新推荐文章于 2024-04-12 17:31:09 发布