在Java中将字符串转换为整数

3

有没有办法在Java中将像"10+(8*9)"这样的字符串转换为整数(结果)?我试图通过将字符串解析为字符、循环遍历它们,然后以某种方式尝试获取结果,但这非常复杂,所以我想知道是否有其他更简单的方法。


没有简单的方法。你需要一个表达式解析器。其中一种可能的选择是使用内置的JavaScript引擎来为您评估它。 - Marko Topolnik
使用内置的JavaScript引擎进行简单的数学计算。 - Konstantin Yovkov
1
通常解决这个问题的方法是将输入转换为逆波兰表示法。 - njzk2
1
@MarkoTopolnik - 当遇到操作符时,使用堆栈并弹出运算数有什么问题吗? - TheLostMind
2个回答

2
你所看到的是中缀表达式。
这种表达方式很难直接解释,通常会先转换成逆波兰式或后缀表达式。
Dijkstra编写了Shunting-yard算法来进行转换。你应该得到一个可以表示为以下形式的结果:
10 8 9 * +

一旦你拥有了这个,你就可以使用后缀算法来解决你所拥有的堆栈。

1
谁给这个回答点了踩,请解释一下你的投票理由;这是一个很好的回答。 - mdl

0

Java拥有内置的javascript引擎,它可以为您评估数学表达式:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Test {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String expression= "10+(8*9)";
    System.out.println(engine.eval(expression));
    } 
}

这是一个好的做法吗?在Java中使用JavaScript? - Mysterion
2
我不会推荐这样做,而不指出你实际上正在调用的不仅仅是一个表达式解析器。这能够执行任意的JavaScript代码,如果输入是用户数据的话,这就非常重要了。 - Joachim Sauer
我已经添加了一个简单的检查器,用于判断它是否为算术表达式,并且它完美地工作了,谢谢。 - Samuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接