我会直截了本地提出我的问题。我有一个带有一些值和运算符的字符串。让我们举个例子
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;区域开始=0;区域长度=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'
}
谢谢
最佳答案
您可以使用 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));
}
}
关于java - 如何将带有运算符的字符串解析为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36127419/