package task0416.coding.basic.stuck.expr; import java.util.ArrayList; import java.util.List; import javax.print.attribute.standard.MediaSize.ISO; public class TokenParser { private String expr; TokenParser(String expr){ this.expr = expr; } public List<Token> getParserList(){ List<Token> array = new ArrayList<>(); char[] chs = expr.toCharArray(); int i = 0; while(i<chs.length){ char c = chs[i]; if(isOperator(c)){ Token t = new Token(Token.OPERATOR,String.valueOf(c)); if("+".equals(String.valueOf(c))||"-".equals(String.valueOf(c))){ t.setLevel(Token.LEVEL_ADD_SUB); }else{ t.setLevel(Token.LEVEL_MUL_DIV); } array.add(t); i++; }else if(Character.isDigit(c)){ int nextOperatorIndex = nextOperatorIndex(i,expr); String value = expr.substring(i, nextOperatorIndex); Token t = new Token(Token.NUMBER,value); array.add(t); i = nextOperatorIndex; } } return array; } private int nextOperatorIndex(int i, String expr2) { char[] chs = expr2.toCharArray(); for (int j = i; j < chs.length; j++) { if(isOperator(chs[j])){ return j; } } return chs.length; } boolean isOperator(char ch){ String s = String.valueOf(ch); boolean result = "+".equals(s)||"-".equals(s)||"*".equals(s)||"/".equals(s); return result; } }