Что такое хорошая библиотека для разбора математических выражений в 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, который может быть интересен для некоторых.

Другие вопросы по тегам