public class Eval {

    public static final char CHARS[] = {' ', '\r', '\n', '\t', '+', '*', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    public int result;
    private int pos;
    private String cont;
    private StringBuffer content;
    
    
    public Eval(String c){
        
        cont = new String(c);
        result = 0;
        pos = 0;
        verify();
        deleteEmpty();
        exp();
                            
    }
                
        
    public StringBuffer verify() {
        
        content = new StringBuffer();
        for (int m=0; m < cont.length(); m++)
            content.append(cont.charAt(m));
                
        int i = 0;
        int j = 0;
        boolean found = false;
        for (;i<content.length();i++){
            for (; j < CHARS.length; j++) 
                if (content.charAt(i) == CHARS[j])
                    found =true;
        
            if (found == false) {
                content.delete(0,content.length());
                content.append("error");
                return content;
            }
        }
        return content;     
        
    }        
        
    public StringBuffer deleteEmpty() {
        int i = 0;
        while (i < content.length()){
            if (content.charAt(i) == ' ' || content.charAt(i) == '\t' || content.charAt(i) == '\n' || content.charAt(i) == '\r') 
                content.deleteCharAt(i);                                
            else                         
                i++;
                        
        }
        first();
        last();
        oneOp();
        return content;
    }
        
    public StringBuffer first() {
        
        try {
            String first = content.substring(0,1);
            int f = Integer.parseInt(first);        
        }
        catch (NumberFormatException e){
            content.delete(0,content.length());
            content.append("Firstdigit error.");
        }
        return content;
        
    }
        
    public StringBuffer last() {
          
        try {
            String last = content.substring(content.length()-1, content.length());
            int l = Integer.parseInt(last);                                                
        }
        catch (NumberFormatException e){
            content.delete(0,content.length());
            content.append("Lastdigit error.");
        }
        return content;

    }
        
        
    public StringBuffer oneOp() {
            
        int i = 0;
        int opAt = -1;
        while (i < content.length()) {
            if (content.charAt(i) == '+' || content.charAt(i) == '*') 
                if (i-1 == opAt){
                    content.delete(0,content.length());
                    content.append("Operand error.");
                    return content;
                }
                    
                else
                        opAt = i;
            i++;
        }
        return content;
    }
    
    
    public int exp() {
        
        result = result + multExp(content);
        while (pos < content.length()) {
            result = result + multExp(content);                        
                                
        }      
        return result;
    }
        
    public int multExp(StringBuffer c) {
            
        int m = 1;
        m = m * atom(c);
        while (c.charAt(pos-1) == '*') {
                
            m = m * atom(c);
                                
        }
        return m;
    }
    
    public int atom(StringBuffer c) {
            
        int digit = 0;
        boolean op = true;
        StringBuffer temp = new StringBuffer();
        while (op && pos < c.length() ) {
                
            if (c.charAt(pos) == '*' || c.charAt(pos) == '+') {
                    op = false;
            }
            else 
                    temp.append(c.charAt(pos));
            pos++;                
                                                                
        }
        digit = toInt(temp);
        temp.delete(0,temp.capacity());
        return digit;
        
    }
    
    
    public int toInt(StringBuffer t) {
            
        int number = 0;
        int i = 0;
        int exp = 0;
        String digit = "";
        for (; i < t.length(); i++) {
                
            digit = t.substring(i,i+1);
            exp = (int) Math.pow(10, t.length()- (i+1));
            number = number + (Integer.parseInt(digit) * exp);

        }
        return number;
        
    }
        
}