Что такое хорошая библиотека для разбора математических выражений в java?

Я разработчик Android, и в качестве части моего следующего приложения мне нужно будет оценить большое количество пользовательских математических выражений и уравнений. Я ищу хорошую библиотеку java, которая легка и может оценивать математические выражения с использованием пользовательских переменных и констант, триггерных и экспоненциальных функций и т. Д.

Я огляделся, и Jep, похоже, был популярен, но мне хотелось бы услышать больше предложений, особенно от людей, которые раньше использовали эти библиотеки.

Solutions Collecting From Web of "Что такое хорошая библиотека для разбора математических выражений в java?"

JEval – хорошая альтернатива. Я отказался от Jep из-за того, что он стал коммерческим. Единственное беспокойство заключается в том, что JEval, похоже, немного неактивен на данный момент (последний релиз в 2008 году).

Я написал простой, но способный Math Expression Evaluator некоторое время назад, что является бесплатным и открытым исходным кодом. Главное преимущество – быть быстрым и крошечным – оба хороши с ручными устройствами. Если это соответствует вашим потребностям, вы можете его использовать.

Основные характеристики:

  • Основные математические операторы с предполагаемым приоритетом (^ * × · / ÷% + -).
  • Явный приоритет с круглыми скобками.
  • Неявное умножение заключенных в скобки подвыражений.
  • Правильная правая ассоциативность экспонент (оператор мощности).
  • Прямая поддержка шестнадцатеричных чисел с префиксом 0x.
  • Константы и переменные.
  • Расширяемые операторы.
  • Расширяемые функции.
  • 20 KiB.

пример

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/ . Это расширяемая система оценки выражений и удовлетворяет таким требованиям.

Это не соответствует моим начальным условиям, но я нашел замечательный парсер, написанный на C ++. Я пытаюсь выяснить поддержку собственного кода Android, чтобы узнать, могу ли я его использовать. Это именно то, что мне нужно.

Вот документация для проекта.
http://www.codeproject.com/KB/recipes/MathieuMathParser.aspx

Существует новый коммерческий инструмент под названием formula4j , который может представлять интерес для некоторых.