Это называется Arithmetic evaluation
.Один из самых простых способов реализовать это - использовать Edsger Dijkstra Shunting-yard_algorithm .
Алгоритм shunting-yard - это метод синтаксического анализа математических уравнений, указанных в инфиксной записи.Он может использоваться для вывода в обратной польской нотации (RPN) или в виде абстрактного синтаксического дерева (AST).Алгоритм был изобретен Эдсгером Дейкстрой и назван алгоритмом «маневрового двора», потому что его работа напоминает работу маневрового участка железной дороги.Как и при оценке RPN, алгоритм шунтирующего двора основан на стеке.Инфиксные выражения - это форма математической нотации, к которой привыкло большинство людей, например 3 + 4 или 3 + 4 * (2−1).Для преобразования есть две текстовые переменные (строки), вход и выход.Существует также стек, в котором хранятся операторы, еще не добавленные в очередь вывода.Чтобы преобразовать, программа читает каждый символ по порядку и делает что-то на основе этого символа.
Но я видел точное решение, которое вы ищете в каком-то блоге пользователя stackoverflow, но я не могу вспомнитьадрес (это было похоже на «код обезьяны»).Это был легкий класс, который вы могли использовать в апплетах (вы также могли определять константы и значения сброса).
Редактировать: Найдено: http://tech.dolhub.com/Code/MathEval
Линейно-рекурсивный математический оценщик
Этот оценщик математических выражений родился из-за необходимости иметь компактное и эффективное решение, которое могло бы достаточно эффективно оценивать произвольные выражения, не требуя предварительной компиляции.Мне нужно было что-то, что делало бы основную математику с переменными, такими выражениями, как «Top + 2», «Bottom-2» и «(Right + 1-Left) / 2».
Исследования в области интернетаряд довольно хороших решений, все из которых вращались вокруг создания деревьев разбора (что имеет смысл).Проблема была в том, что все они были довольно громоздкими, и я не мог позволить себе добавить 100К к размеру моего апплета только для математики.Поэтому я начал задумываться о линейном рекурсивном решении проблемы.Конечным результатом является приемлемо работающий отдельный класс без внешних зависимостей весом менее 10 КиБ.