我会问我的问题。我有一个带有一些值和运算符的字符串。我们来看一个
的例子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'
}
由于
答案 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));
}
}