package com.coding.basic.stack.expr; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class TokenParser { public List<Token> parse(String expr) { List<Token> tokens = new ArrayList<>(); StringTokenizer st = new StringTokenizer(expr, "\\+|\\-|\\*|\\/|\\ ", true); while(st.hasMoreElements()){ String value=st.nextToken(); //可能有空格 if (isOperator(value)) { tokens.add(new Token(Token.OPERATOR, value)); } else if (isNumber(value)) { tokens.add(new Token(Token.NUMBER, value)); } } return tokens; } private boolean isOperator(String value) { return value.length()==1&&Token.OPERATORS.contains(value); } private boolean isNumber(String value) { return value.matches("[0-9]+"); } }