package com.ralf.stack.expr; import java.util.ArrayList; import java.util.List; public class TokenParser { public TokenParser(){ } public List<Token> parse(String string) { List<Token> tokens = new ArrayList<Token>(); int i = 0; while(i < string.length()){ char ch = string.charAt(i); if (isOperator(ch)) { Token token = new Token(String.valueOf(ch), Token.OPERATOR); tokens.add(token); i++; } else if (Character.isDigit(ch)) { int nextIndexOfChar = nextIndexOfOperator(i,string); String value = string.substring(i, nextIndexOfChar); Token token = new Token(value, Token.NUMBER); tokens.add(token); i = nextIndexOfChar; } else { System.out.println("char:" + ch + " is not a number or operator,ignore!"); i++; } } return tokens; } private int nextIndexOfOperator(int i, String string) { while(Character.isDigit(string.charAt(i))){ i++; if (i == string.length()) { break; } } return i; } private boolean isOperator(char ch) { String string = String.valueOf(ch); return Token.OPERATORS.contains(string); } }