package datastructure.stack.expr;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TokenParser {
private String expr;
private List<Token> tokenList = new ArrayList<>();
public TokenParser(String expr) {
this.expr = expr;
}
public List<Token> parse() {
if (expr == null || "".equals(expr)) {
return Collections.emptyList();
}
char[] charArray = expr.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (isNumber(charArray[i])) {
i = addFullNumber(charArray, i);
i--;
} else if (isOperator(charArray[i])) {
addOperator(charArray[i]);
}
}
return tokenList;
}
private boolean isNumber(char c) {
String numbers = "0123456789";
if (numbers.indexOf(c) != -1) {
return true;
}
return false;
}
private boolean isOperator(char c) {
String supplyOperator = "+-*/()";
if (supplyOperator.indexOf(c) != -1) {
return true;
}
return false;
}
private int addFullNumber(char[] charArray, int i) {
StringBuilder builder = new StringBuilder();
for (; i < charArray.length; i++) {
if (isNumber(charArray[i])) {
builder.append(charArray[i]);
} else {
break;
}
}
tokenList.add(new Token(Token.NUMBER, builder.toString()));
return i;
}
private void addOperator(char c) {
tokenList.add(new Token(Token.OPERATOR, String.valueOf(c)));
}
}