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; } }