public class StringParser{ private String input; public StringParser(String str){ input=str; } private void advance(int howFar){ input=input.substring(howFar); } private int eval(){ int left; if (match("(")) { advance(1); left=eval(); insist(")"); } else { left=parseInt(); } if (input.length() > 0){ char op=input.charAt(0); if (op=='+' || op=='*') { advance(1); int right=eval(); if (op=='+'){ return left+right; } else { return left*right; } } } return left; } private boolean match(String pat){ return input.startsWith(pat); } private void insist(String pat){ if (!match(pat)){ throw new IllegalArgumentException(input); } advance(pat.length()); } private int parseInt(){ int i=0; int rval; while (i<input.length() && '0' <= input.charAt(i) && input.charAt(i) <= '9'){ i++; } rval= Integer.parseInt(input.substring(0,i)); advance(i); return rval; } public static void main(String[] args){ StringParser Parser=new StringParser("((3+4)*2)+3)"); int i=Parser.eval(); System.out.println(i); } } //