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

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

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

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