Преобразование вставленной строки в компилируемое выражение - PullRequest
1 голос
/ 08 июня 2009

Я как-то новичок в Java, поэтому мой вопрос может показаться тривиальным, однако я нигде не могу найти ответ на него в своих книгах.

Я хочу начать диалог с пользователем, в котором он вводит арифметическое выражение (например, (2 * x + y)), а затем выводит результат для такого выражения (для заданных значений x и y)

    String EXPRESION = null;
    EXPRESION = JOptionPane.showInputDialog("Please enter expresion for dy/dx");
    double x = 1.4;
    double y = 5;
    double output = HERE IS THE PROBLEM
    JOptionPane.showMessageDialog("The value is" +output);

Мне не удалось преобразовать строку, вставленную пользователем, чтобы она служила арифметическим выражением для x и y и, следовательно, определяла значение для вывода

ТИА СГН

Ответы [ 5 ]

4 голосов
/ 08 июня 2009

Не так уж сложно разобрать их самостоятельно, но если вам нужен быстрый и, возможно, точный результат, вы можете использовать одну из существующих библиотек для разбора арифметических выражений, например JEP или, возможно, Простой парсер для арифметических выражений .

См. Образец Jep Console . Похоже, Jep - платное ПО. Это может не быть проблемой, иначе, как я написал, вы сможете найти несколько эквивалентных библиотек.

3 голосов
/ 08 июня 2009

Вы должны написать синтаксический анализатор выражений, чтобы выполнить такое поведение. Есть несколько способов сделать это:

  1. Напишите свой собственный анализатор выражений, например, используя ANTLR.
  2. Включите язык сценариев (Jython, Beanshell, JavaScript ...) и используйте его для анализа и оценки выражений. Java Scripting API может показать вам, как это сделать.
1 голос
/ 16 июля 2010

Вы также можете посмотреть на JScheme. Необходимо скомпилировать и запустить файл jar jscheme.

import jscheme.JS; 

String query = "(+ 10 20)";
System.out.println(query + " = " + JS.eval(query));

См. Третий пример внизу http://jscheme.sourceforge.net/jscheme/doc/userman.html#si

Главная страница JScheme на http://jscheme.sourceforge.net/jscheme/main.html

1 голос
/ 08 июня 2009

В Java нет встроенного средства для оценки строк как выражений. Поэтому вы должны сделать работу самостоятельно.

Если вы просто хотите быстрое и грязное решение, Javassist включает в себя компилятор фрагмента, который позволяет вам определять новый класс с вашим выражением и вызывать его, чтобы получить свой результат, после чего вы можете отказаться от него (т.е. запустить его в Загрузчик классов). Это потребует некоторой работы, хотя:)

http://www.jboss.org/javassist/

0 голосов
/ 10 декабря 2011

Как преобразовать строку в арифметическое выражение

import bsh.*;

 class Operation
 {

    public static void main(String[] args)throws Exception
    {
        Interpreter i=new Interpreter();
        int r=(Integer)i.eval(args[0]);
        System.out.println(r);
    }
}

для этого нам нужен отдельный файл jar с именем: bsh.jar file

необходимо установить classpath для указанного выше файла jar

Источник: http://ohmjavaclasses.blogspot.com/2011/11/how-to-convert-string-into-arithmetic.html

...