在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/