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

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

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

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