Уравнение разбора "100-x + 200" и оценки его значения в Java - PullRequest
1 голос
/ 01 июня 2011

Следующий код должен быть довольно очевидным. Что я сделал до сих пор, чтобы вычислить Y с переменной x и некоторыми константами:

public static void main(String[] args) {
    int x=50;
    String str="100-x+200";
    str=str.replaceAll("x", Integer.toString(x));
    String [] arrComputeNumber = str.split("[-|+]");
    String [] arrComputeOperator = str.split("[\\d]");
    int y=Integer.parseInt(arrComputeNumber[0]);
    for (int i = 0; i < arrComputeOperator.length; i++) {
        if (arrComputeOperator[i].equals("-")) {
            y-=Integer.parseInt(arrComputeNumber[i+1]);
        } else if (arrComputeOperator[i].equals("+")) {
            y+=Integer.parseInt(arrComputeNumber[i+1]); 
        }
    }
    System.out.println("y="+y);
}

К сожалению, это не работает, поскольку str.split("[\\d]") извлекает неправильно.

Если это правильно, я предполагаю, что приведенный выше код будет работать правильно. В любом случае, эта реализация просто тривиальна и не учитывает скобки или комбинацию + (которая становится минусом) и т. Д. Я не нашел лучших способов. Знаете ли вы какие-нибудь лучшие способы оценить строку как математическое выражение в Java?

1 Ответ

1 голос
/ 01 июня 2011

Вы можете использовать BeanShell .Это интерпретатор Java.

Вот код:

Interpreter interpreter = new Interpreter();
interpreter.eval("x = 50");
interpreter.eval("result = 100 - x + 200");
System.out.println(interpreter.get("result"));
...