首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

请教, Java 对一个字符串进行加减乘除的运算的小小问题

  •  
  •   13192262269 · 3 天前 · 1052 次点击
    有没有什么函数,表达式可以直接用的?
    如:String s = "( 1+2*3 )-10/2";
    结果:2
    24 回复  |  直到 2019-04-17 14:18:43 +08:00
        1
    xlui   3 天前 via iPhone
    据我所知没有,但是你可以搜一搜 中缀表达式转后缀表达式 和 后缀表达式求解。
        2
    cnzjl   3 天前
    String s = Integer.toString((1+2*3 )-10/2);
        4
    chocotan   3 天前   ♥ 1
        5
    lihongjie0209   3 天前   ♥ 1
    直接调用 JavaScript 执行引擎?
        6
    sigup   3 天前
    ```java
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    System.out.println(engine.eval("(1+2*3)-10/2"));

    ```
    不过要做好校验,否则就是后门了
        7
    hoosin   3 天前
    @lihongjie0209 JavaScript eval 有安全问题,所以约等于废弃了
        8
    HuHui   3 天前 via Android
    jexl 完全满足
        9
    loveCoding   3 天前
    看看这个库
    org.apache.commons:commons-jexl3
        10
    loveCoding   3 天前
    @HuHui 没看到你已经发了
        11
    lihongjie0209   3 天前
    @hoosin
    考虑一下 el 表达式?
    或者 eval 之前做过滤?
    或者可以设置 js 执行引擎的权限?
        12
    lihongjie0209   3 天前
    @hoosin 或者是内嵌一个 groovy 引擎?
        13
    BBCCBB   3 天前
    spring 的 spel 模块也可以
        14
    nekoneko   3 天前
    可以考虑自己做一个做计算的方法。算法可以参考逆波兰式
        15
    rizon   3 天前
    四则运算调用 js 引擎处理也是个选择,甚至通过跑 sql 来计算也是可以的。。
    不过常规来说,四则运算解析工具类应该也很多吧。
        17
    stevenbipt   3 天前 via Android   ♥ 1
    不行自己用两个栈写一个😂😂😂
        18
    jlhde123   3 天前
    ANTRL4
        19
    liujan   3 天前
    qlexpresss 试下,阿里出的
        20
    jinue9900   3 天前
    groovy 可以只要把双引号去掉就 Ok 了
        21
    9684xtpa   3 天前
    ![]( )
    用 MVEL 也行
        22
    mrsatangel   3 天前
    推一把 killme2008 的 aviator https://github.com/killme2008/aviator
        23
    13192262269   2 天前
    @AlisaDestiny #3 请问一下,你是怎样搜出来的?我百度输入“ java eval 函数”,找不到这个链接,是必须是要先翻译成英文再搜索吗?
        24
    m2276699   1 天前
    sql?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   982 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 22:35 · PVG 06:35 · LAX 15:35 · JFK 18:35
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1