如何解析具有运算符的字符串?

时间:2016-03-21 09:38:04

标签: java android string parsing integer

我会问我的问题。我有一个带有一些值和运算符的字符串。我们来看一个

的例子

4 * 24 + Math.sqrt(36) - 5

所以,如果我Integer.parseInt()它崩溃了。在进一步搜索时,我发现我必须使用解析器。但它们是用于命令行java而我的是在android中。

所以我的问题是如何将此字符串“4 * 24 + Math.sqrt(36) - 5”转换为计算结果的整数?此方法还包括Math.sqrt ()函数吗?

感谢。

编辑1:

回应hacker13ua

当我尝试您的MAVEN方法时,我收到此错误。任何想法为什么?

引起:java.lang.StringIndexOutOfBoundsException:length = 1; regionStart = 0; regionLength = 3

我的代码:

final String foo = "4 * 24 + Math.sqrt(36) - 5";
                    Object i = MVEL.eval(foo);
                    String in = i.toString();
                    Toast.makeText(MainActivity.this,String.valueOf(in).toString(), Toast.LENGTH_LONG).show();

这是我的gradle构建文件

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'org.mvel:mvel2:2.2.7.Final'

}

由于

1 个答案:

答案 0 :(得分:2)

您可以使用javascript引擎。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main
{
    public static void main(final String[] args) throws ScriptException
    {
        final ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        final ScriptEngine engine = scriptEngineManager.getEngineByName("javascript");
        final String foo = "4 * 24 + Math.sqrt(36) - 5";
        System.out.println(engine.eval(foo));
    }
}

或者您可以使用MVEL。 Maven依赖:

<dependency>
    <groupId>org.mvel</groupId>
    <artifactId>mvel2</artifactId>
    <version>2.2.7.Final</version>
</dependency>

您的代码:

import org.mvel2.MVEL;

public class Main
{
    public static void main(final String[] args)
    {
        final String foo = "4 * 24 + Math.sqrt(36) - 5";
        System.out.println(MVEL.eval(foo));
    }
}