package com.dataStructure.expr; import java.util.LinkedList; import java.util.List; /** * Created by wang on 2017/4/14. */ public class ExprParse { public List<Token> prase(String expr){ List<Token> tokens = new LinkedList<>(); int i = 0; while(i < expr.length()){ char c = expr.charAt(i); if(isOperator(c)){ Token t = new Token(Token.OPERATOR,String.valueOf(c)); tokens.add(t); i++; }else if(isNumber(c)){ int nextIsNumberIndex = nextIsNumber(expr,i); String num = expr.substring(i,nextIsNumberIndex); Token t = new Token(Token.NUMBER,num); tokens.add(t); i=nextIsNumberIndex; }else{ throw new RuntimeException( c + " is not operator or number ! " ); } } return tokens; } private int nextIsNumber(String expr,int i) { while(i<expr.length()){ char c = expr.charAt(i); if(isNumber(c)){ i++; }else{ break; } } return i; } private boolean isNumber(char c) { int num = (int)c - 48; for(int i = 0; i<10; i++){ if(num == i){ return true; } } return false; } private boolean isOperator(char c) { if(c=='+'){ return true; }else if(c=='-'){ return true; }else if(c=='*'){ return true; }else if(c=='/'){ return true; }else{ return false; } } }