将数学字符串转换为int

Geo*_*rge 5 java math operators

是否有一种简单的方法来取一个字符串,如"5*4"并返回20?

Mic*_*rdt 6

最简单的方法是使用JRE 6标准API提供的Rhino JavaScript引擎.

编辑:根据评论,如果字符串是用户提供的,这可能是一个潜在的安全漏洞.一定要过滤除数字,大括号和数学运算符以外的所有内容.

  • 是的......但是javascript引擎除此之外还有更多功能.如果你在某些情况下暴露了Rhino评估者,你可能会引入......嗯...安全问题. (3认同)
  • 这种事情总是让我想起SQL代码注入漏洞.如果这些字符串来自程序外部(用户,文件,套接字......),为了确保它们不是潜在的安全风险,您可能还需要解析它们.好吧,好吧,不完全 - 你可以通过正则表达式检查来解决,因为你只关心合法令牌的集合.并且Javascript没有标准文件操作等,所以无论如何你都可能是安全的.还是 - 这让我感到紧张. (3认同)

bak*_*kal 3

我不知道哪个是最好的,但有“数学表达式评估器”包。

查看Java 数学表达式计算器(包含一个文件源代码)

网站使用示例:

java -cp meval.jar com.primalworld.math.MathEvaluator -cos(0)*(1+2)
java -cp meval.jar com.primalworld.math.MathEvaluator .05*200+3.01