SavK,
вставка токенов и их повторный анализ, похоже, являются бесполезными операциями.(тем не менее, приведенное выше решение для регулярных выражений просто короткое и хорошее (+1 от меня)) В качестве альтернативы вы можете предоставить токены непосредственно алгоритму Shunting Yard (для которого нужны токены в качестве входных данных). класс (начиная с JDK 1.0) для разбора выражения для токенов.Он выполняет весь синтаксический анализ, который вам нужен, чтобы вернуть вам токены (и даже больше: получает числа в виде целых чисел).
Вот примитивная демонстрация.
package core;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
public class Q {
public static void main(String[] args) {
StreamTokenizer stok = new StreamTokenizer(new StringReader("1+(40*8)"));
stok.parseNumbers();
try {
while(stok.nextToken() != StreamTokenizer.TT_EOF) {
System.out.println("nval: "+stok.nval);
System.out.println("sval: "+stok.sval);
System.out.println("ttype: "+stok.ttype);
System.out.println("toString: "+stok.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}