【mathematical-expression】数学表达式解析的Java与Scala与python以及C++技术框架免费推荐,以及Java版本的使用示例

        各位好,在我们的日常开发需求中,有这样的一种需求,解析一个字符串的数学表达式,并将其结果获取到,例如需要开发一个计算器等需求的时候,这类技术往往是需要但却难以找到,而在GitHub中,发现了这样的一个框架,它实现了强悍的数学计算功能,从简单的无括号表达式到数列累加表达式,或者自定义函数计算表达式等,该框架中都有所实现,下面一起来看一下有关该框架的信息吧!

框架名称:mathematical-expression

框架链接JavaAPI:GitHub - BeardedManZhao/mathematical-expression: Java API concise framework for parsing string mathematical expressions | 用于解析字符串数学表达式的JavaAPI简洁框架 

框架链接PythonAPI:

GitHub - BeardedManZhao/mathematical-expression-py: Python API concise framework for parsing string mathematical expressions | 用于解析字符串数学表达式的PythonAPI简洁框架

框架链接C++:

GitHub - BeardedManZhao/mathematical-expression-cpp: Java API concise framework for parsing string mathematical expressions | 用于解析字符串数学表达式的 C++API 简洁框架

框架链接Js与后端接口版本: 

GitHub - BeardedManZhao/mathematical-expression-JS: ME 数学表达式解析库已经集成到了网站计算服务中的公共API 中,您可以通过调用公共的 API 接口并按照适当的方式传递参数实现 JS 中调用 数学表达式的需求,接下来就是相关的处理。

       在上述的API有两套实现,语法上几乎是一致的,针对数学表达式需求的开发者们,可以直接通过maven, gradle,pip 三种方式获取到这个框架,可以说是比较友好的一种技术了,下面来带大家看一看,如何使用框架

1,将框架下载下来

        针对Java或Scala开发者来说,通过maven获取到框架是有效的一种操作,maven导入mathematical-expression的依赖坐标就如下所示,当然啦,针对python党们,使用pip命令就是最好的选择,这个框架支持使用pip的哦!

        请注意 在 Java API 的 1.2.X 版本中,数值的解析模块有一些问题,现如今在 1.2.X 版本中已经得到了解决,因此请使用 1.3.X 版本!!!

    <dependencies>
        <dependency>
            <groupId>io.github.BeardedManZhao</groupId>
            <artifactId>mathematical-expression</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>
pip install mathematical_expression_py

 如果您是一位python玩家,可以在  mathematical-expression-py · PyPI 查阅到有关python的文档!

        接下来,使用这个框架进行一个具有嵌套括号数学表达式的计算,一起来看看它的表现吧!

package core;

import core.calculation.number.BracketsCalculation2;
import core.container.CalculationNumberResults;
import exceptional.WrongFormat;

public class MAIN {
    public static void main(String[] args) throws WrongFormat {
        // 获取到括号表达式计算组件,这里就是为获取到的组件起一个唯一的名字
        // 这个操作会将当前组件实例化,以name的名字添加到管理者中,如果这个名字在之前就已经使用过,只需要更换一个就好啦
        BracketsCalculation2 bracketsCalculation2 = BracketsCalculation2.getInstance("name");
        // 构建一个数学表达式 这是一个嵌套数学表达式,计算复杂表达式针对这个框架来说是没有问题的哦!
        String s = "3 * (20 / (11 - 1))";
        // 检查数学表达式是否有错误,针对确定没有问题的数学表达式,也可以不检查,如果检查出错误,这里会抛出错误信息
        bracketsCalculation2.check(s);
        // 计算数学表达式,会返回一个结果对象,其中存储着运算结果以及运算过程中的信息
        CalculationNumberResults calculation = bracketsCalculation2.calculation(s);
        System.out.println(calculation.getResult());
    }
}

        计算的时候有一些日志的产生,在resource文件夹下的log4j.xml文件中,设置了日志级别为INFO,因为有一些操作在日志中体现,我们看到“name”被注册到管理者中啦,这也是一个有趣的小设计,它将一个名字对应一个计算组件,使得计算组件可以像单例设计一样被复用,也可以被重新实例化 ,这里只是演示了一个计算功能啦,各位如果感兴趣,可以去试一下哦!!!

高阶操作

        在此框架的 1.3.1 以及 以上的版本中,您可以直接使用数学函数公式的方法将一个函数注册到框架中,下面是一些实例

数学方式的函数注册与计算

package top.lingyuzhao;

import core.Mathematical_Expression;
import core.calculation.Calculation;
import core.calculation.function.FunctionPackage;
import exceptional.WrongFormat;

public class MAIN {

    public static void main(String[] args) throws WrongFormat {
    	// 将 f 函数注册进来
        Mathematical_Expression.register_function("f(x) = x * x");
        // 准备要计算的表达式
        final String data = "1 + f(20) + 3";
        // 获取到计算组件
        final Calculation instance = Mathematical_Expression.getInstance(Mathematical_Expression.functionFormulaCalculation2);
        // 检查与计算
        instance.check(data);
        System.out.println(instance.calculation(data));
    }
}

下面就是计算结果

CalculationNumberResults{result=404.0, source='BracketsCalculation2'}

匿名实现的函数注册于计算

package top.lingyuzhao;

import core.Mathematical_Expression;
import core.calculation.Calculation;
import core.calculation.function.FunctionPackage;
import core.calculation.function.ManyToOneNumberFunction;
import exceptional.WrongFormat;

public class MAIN {

    public static void main(String[] args) throws WrongFormat {
        // 将 f 函数注册进来
        Mathematical_Expression.register_function(new ManyToOneNumberFunction("f") {
            @Override
            public double run(double... numbers) {
                return 1 + numbers[0] * numbers[0] + 3;
            }
        });
        // 准备要计算的表达式
        final String data = "1 + f(20) + 3";
        // 获取到计算组件
        final Calculation instance = Mathematical_Expression.getInstance(Mathematical_Expression.functionFormulaCalculation2);
        // 检查与计算
        instance.check(data);
        System.out.println(instance.calculation(data));
    }
}

下面就是计算结果

CalculationNumberResults{result=408.0, source='BracketsCalculation2'}

鸣谢:@波光倩影 查找并告知到文章以及框架中的浮点数值解析错误,在此鸣谢!!! 欢迎各位小伙伴继续指正!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值