Что такое хорошая библиотека для разбора математических выражений в Java?
Я разработчик для Android, и как часть моего следующего приложения мне нужно будет оценить большое разнообразие математических выражений и уравнений, созданных пользователем. Я ищу хорошую библиотеку Java, которая является легкой и может оценивать математические выражения, используя пользовательские переменные и константы, триггерные и экспоненциальные функции и т. Д.
Я посмотрел вокруг, и Jep, кажется, популярен, но я хотел бы услышать больше предложений, особенно от людей, которые раньше использовали эти библиотеки.
5 ответов
JEval - хорошая альтернатива Я отказался от Jep из-за того, что он стал коммерческим. Единственная проблема заключается в том, что в настоящий момент JEval выглядит немного бездействующим (последний выпуск в 2008 году).
Некоторое время назад я написал простой, но способный Math Expression Evaluator, бесплатный и с открытым исходным кодом. Главное преимущество в том, что он быстрый и крошечный - и то, и другое хорошо для портативных устройств. Если он соответствует вашим потребностям, вы можете использовать его.
Основные характеристики:
- Основные математические операторы, с предполагаемым приоритетом (^ * × · / ÷ % + -).
- Явный приоритет с круглыми скобками.
- Неявное умножение заключенных в скобки подвыражений.
- Правильная правоассоциативность экспонент (степенной оператор).
- Прямая поддержка шестнадцатеричных чисел с префиксом 0x.
- Константы и переменные.
- Расширяемые операторы.
- Расширяемые функции.
- 20 КиБ.
пример
MathEval math=new MathEval();
math.setVariable("Top", 5);
math.setVariable("Left", 20);
math.setVariable("Bottom",15);
math.setVariable("Right", 60);
System.out.println("Middle: "+math.evaluate("floor((Right+1-Left)/2)"));
Попробуйте https://code.google.com/p/expressionoasis/. Это расширяемая структура Expression Evaluation, которая будет отвечать таким требованиям.
Это не совсем соответствует моим начальным условиям, но я нашел замечательный парсер, написанный на C++. Я пытаюсь выяснить, поддерживает ли нативный код Android, чтобы узнать, смогу ли я его использовать. Это именно то, что мне нужно.
Вот документация для проекта.
http://www.codeproject.com/KB/recipes/MathieuMathParser.aspx
Существует новый коммерческий инструмент под названием Formula 4j, который может быть интересен для некоторых.