在Android上有解析库的数学表达式吗?

目前我在iOS上有一个应用程序,我希望移植到Android。 此应用程序使用Objective-C GCMathParser框架/类。

我正在寻找Android上的替代品(或使GCMathParser在Android上运行的方法),它可以计算如下内容:

2*2 (2+3)+2 ((2+3)+2)/5 (-2 + sqrt((-5^2)-4*2*3))/(2 * 2) 

我希望能够将一个字符串输入到此(如上所述)并返回结果,最好是相对精确(如double)。

在Android上解析数学表达式有哪些选择?

MVEL怎么样?

 Map vars = new HashMap(); vars.put("x", new Integer(5)); vars.put("y", new Integer(10)); Integer result = (Integer) MVEL.eval("x * y", vars); 

您也可以在其中使用纯Java调用,如Math.sqrt(...)

看看其中一个库:

  • 数学表达式计算器库
  • jsience.org

评估有序表达式非常简单。 如果需要引用,请查看GNU expr程序以获取C源代码。 我已将它移植到Java用于我自己的项目。 它简单易用: http://www.codeforge.com/read/126659/expr.c__html

如果您不想使用库,或者找不到库,您可以随时使用webView来解决使用javascript的function。

这是一个如何做到这一点的示例(计算1 + 2):

 public class MainActivity extends Activity { private boolean _hasAnsweredQuestion =false; /** Called when the activity is first created. */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final WebView webView=(WebView)findViewById(R.id.webView1); webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(final WebView view,final String url) { super.onPageFinished(view,url); if(_hasAnsweredQuestion) return; _hasAnsweredQuestion=true; final String mathProblem="1+2"; final String newUrl="javascript:AndroidFunction.showToast("+mathProblem+");"; webView.loadUrl(newUrl); } }); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new Object() { @JavascriptInterface public void showToast(final String webMessage) { Toast.makeText(MainActivity.this,webMessage,Toast.LENGTH_SHORT).show(); } },"AndroidFunction"); webView.loadUrl(" "); } }