热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java表达式解析引擎_Aviator轻量Java表达式引擎

Aviator是一个轻量级、高性能的Java表达式执行引擎,它动态地将表达式编译成字节码并运行。使用com.googlecode.aviatoraviator{ver

Aviator 是一个轻量级、高性能的 Java 表达式执行引擎,它动态地将表达式编译成字节码并运行。

使用

com.googlecode.aviator

aviator

{version}

最简单直观的使用:

import com.googlecode.aviator.AviatorEvaluator;

public class TestAviator {

public static void main(String[] args) {

Long result = (Long) AviatorEvaluator.execute("1+2+3");

System.out.println(result);

}

}

更加复杂的使用方式可以参考 wiki,文档已经足够详细,不在重复。

源码解析

执行表达式

主要接口

218ad30c6c44423a083b1d7dadec0ecb.png

AviatorEvaluator 最重要的一个方法

execute(String expression)

execute(String expression, Map env)

execute(String expression, Map env, boolean cached)

用来执行表达式,并获取结果。围绕这个方法也有可以传入变量的 exec 方法

exec(String expression, Object... values)

内置方法和自定义方法

自定义方法

4e7c5230b73637d643f13843c73b19f0.png

主要可以分为以下几大类,包括数学计算相关,字符串处理相关

数学计算

MathAbsFunction

MathCosFunction

MathLog10Function

MathLogFunction

MathPowFunction

MathRoundFunction

MathSinFunction

MathSqrtFunction

MathTanFunction

字符串相关

StringContainsFunction

StringEndsWithFunction

StringIndexOfFunction

StringJoinFunction

StringLengthFunction

StringReplaceAllFunction

StringReplaceFirstFunction

StringSplitFunction

StringStartsWithFunction

StringSubStringFunction

序列相关方法

SeqCompsitePredFunFunction

SeqCountFunction # count(list) 长度

SeqFilterFunction # 过滤

SeqIncludeFunction # 是否在序列中

SeqMakePredicateFunFunction

SeqMapFunction # 遍历序列

SeqPredicateFunction

SeqReduceFunction # 求和

SeqSortFunction

SeqEveryFunction # 每个都满足

SeqNotAnyFunction # 不在

SeqSomeFunction # 序列中一个元素满足

额外的方法

BinaryFunction

BooleanFunction

Date2StringFunction

DateFormatCache

DoubleFunction

LongFunction

NowFunction

PrintFunction

PrintlnFunction

RandomFunction

StrFunction

String2DateFunction

SysDateFunction

表达式语法解析

FakeCodeGenerator

演示将中缀表达式转换为后缀表达式

reference



推荐阅读
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • 本文探讨了如何在 Pug 模板中正确地使用 JSON 插值,并解决了相关文档不足的问题。我们将介绍通过 gulp-pug 处理 JSON 数据的具体方法,以及如何在模板中插入和显示这些数据。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • Java多重继承的替代方案及设计考量
    本文探讨了Java为何不支持多重继承,并深入分析了其背后的原理和替代方案。通过理解Java的设计哲学,开发者可以更好地利用接口和其他特性来实现复杂的类结构。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
author-avatar
堵晴__晨1997_361
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有