Java String 完成数学求和

标签 java string numbers int

在java中,我目前正在尝试找到一种方法来进行数学求和,方法是在JTextField中输入文本,将其放入字符串中,然后将其转换为int并求解。然而问题是,我不想简单地将一个数字放入字符串中,而是一个实际的总和,包括加法、减法等。

目前它只会接受类似 1 的操作,它将从字符串转换为 int,但是当我执行 '1+1' 甚至只是 '1+' 时,它会到处抛出异常,因为 '+' 不是' t 一个数字。
我已经知道它不起作用,因为 int 只允许数字。

有没有办法可以安全地在文本字段中输入完整的总和并以某种方式将其转换为 int ?就像输入 7-2*5 然后将答案保存在 int 中一样?

谢谢。

最佳答案

您可以使用 JavaScript 引擎:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String expression = textField.getText();
System.out.println(engine.eval(expression));

编辑以允许所有方程式:

现在您需要做的就是允许诸如 sin、cos、tan 之类的东西:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String expression = textField.getText();

// Between here...
        expression = expression.
                replace("sin", "Math.sin").
                replace("cos", "Math.cos").
                replace("tan", "Math.tan").
                replace("sqrt", "Math.sqrt").
                replace("log", "Math.log").
                replace("pi", "Math.PI");
// And so on...

System.out.println(engine.eval(foo));

那么你可以这样做:

5 + 5 - 2 / 5 + sin(55) - log(20)

任何你想要的。

关于Java String 完成数学求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955479/

相关文章:

java - 如何找出某个字符是字符串中第一次、第二次还是第三次出现?

javascript - js( Node )中的条件语句没有响应

java - 如何用Java实现乘法

java - 将包含小数的字符串转换为 Long

Java Netbeans 8.0 Jframe GUI 程序 - arraylist 中的每个索引值未显示在 jtextArea 中的单独行上

string - 在字符串中省略 nil

c++ - 如何确定两个字符串是否足够接近?

C# 随机数不是 "random"

string - 使用 Excel-VBA 从字符串中提取 5 位数字

java - ExpandBar 与 GridLayout 一起工作不正确