Вы можете использовать ScriptEngine:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String foo = "( (21 + 3) / 4 ) ";
try {
System.out.println(engine.eval(foo));
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Отказ от ответственности: этот ответ действителен только в том случае, если вы намереваетесь сами делать это. Если вы ищете быстрый / эффективный способ проведения такого разбора, лучше использовать какой-либо инструмент / библиотеку, как предлагается в других ответах ...
У вас есть программа, которая преобразует нотацию infix в постфиксная нотация. Например:
infix: ((21 + 3) / 4)
blockquote>должно выводить что-то вроде:
postfix: 21 3 + 4 /
blockquote>Теперь, если вы хотите оценить это выражение, нотация постфикса довольно проста: при чтении токена слева направо вам просто нужно стекать операнды (21, 3, ...), пока не будет найден оператор (+, /). Затем вы набираете стек, применяете оператор и складываете результат.
- init stack: [], expr: 21 3 + 4 /
- read
21
, stack it: stack: [21], expr: 3 + 4 /- читать
3
, стек: стек: [21 3], expr: + 4 /- читать
+
, pop3
и21
, добавить и вывести результат стека24
: [24], expr: 4 /- прочитать
4
, уложить стек: [24 4], expr: /- читать
/
, pop4
и24
, делить и выводить результат6
stack: [6], expr:.Когда токена больше нет, стек содержит окончательный результат.