赞
踩
将多个文本字符串合并成一个文本字符串。
CONCATENATE(text1,[text2], …)
例如函数 CONCATENATE(A,B,C),返回值为 ABC。
注:字段或者函数之间,用逗号隔开;如果是字符串,需要用引号包裹起来。
将姓名和学号连起来成为一个新的字符串。
首先我们在function包下创建text包,在text包下创建ConcatenateFunction类,代码如下:
- package com.ql.util.express.self.combat.function.text;
-
- import com.ql.util.express.Operator;
- import com.ql.util.express.self.combat.exception.FormulaException;
-
- import java.util.Arrays;
-
- /**
- * 类描述: CONCATENATE函数
- *
- * @author admin
- * @version 1.0.0
- * @date 2023/11/24 13:24
- */
- public class ConcatenateFunction extends Operator {
-
- public ConcatenateFunction(String name) {
- this.name = name;
- }
-
- @Override
- public Object executeInner(Object[] list) throws Exception {
-
- if (list.length == 0) {
- throw new FormulaException("操作数异常");
- }
- StringBuilder sb = new StringBuilder();
- Arrays.stream(list).forEach(entity->sb.append(entity));
- return sb.toString();
- }
- }
把ConcatenateFunction类注册到公式函数入口类中,代码如下:
- package com.ql.util.express.self.combat.ext;
-
- import com.ql.util.express.ExpressRunner;
- import com.ql.util.express.IExpressResourceLoader;
- import com.ql.util.express.parse.NodeTypeManager;
- import com.ql.util.express.self.combat.function.logic.*;
- import com.ql.util.express.self.combat.function.math.*;
- import com.ql.util.express.self.combat.function.text.CharFunction;
- import com.ql.util.express.self.combat.function.text.ConcatenateFunction;
-
- /**
- * 类描述: 仿简道云公式函数实战入口类
- *
- * @author admin
- * @version 1.0.0
- * @date 2023/11/21 15:29
- */
- public class FormulaRunner extends ExpressRunner {
-
- public FormulaRunner() {
- super();
- }
-
- public FormulaRunner(boolean isPrecise, boolean isTrace) {
- super(isPrecise,isTrace);
- }
-
- public FormulaRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) {
- super(isPrecise,isStrace,nodeTypeManager);
- }
-
- public FormulaRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, NodeTypeManager nodeTypeManager) {
- super(isPrecise,isTrace,iExpressResourceLoader,nodeTypeManager);
- }
-
- @Override
- public void addSystemFunctions() {
- // ExpressRunner 的内部系统函数
- super.addSystemFunctions();
- // 扩展公式函数
- this.customFunction();
- }
- /***
- * 自定义公式函数
- */
- public void customFunction() {
-
- // 逻辑公式函数
- this.addLogicFunction();
-
- // 数学公式函数
- this.addMathFunction();
-
- // 文本函数
- this.addTextFunction();
- }
-
- public void addTextFunction() {
- // CHAR函数
- this.addFunction("CHAR",new CharFunction("CHAR"));
-
- // CONCATENATE函数
- this.addFunction("CONCATENATE",new ConcatenateFunction("CONCATENATE"));
- }
-
- public void addLogicFunction() {
- // AND函数
- this.addFunction("AND",new AndFunction("AND"));
-
- // IF函数
- this.addFunction("IF",new IfFunction("IF"));
-
- // IFS函数
- this.addFunction("IFS",new IfsFunction("IFS"));
-
- // XOR函数
- this.addFunction("XOR",new XorFunction("XOR"));
-
- // TRUE函数
- this.addFunction("TRUE",new TrueFunction("TRUE"));
-
- // FALSE函数
- this.addFunction("FALSE",new FalseFunction("FALSE"));
-
- // NOT函数
- this.addFunction("NOT",new NotFunction("NOT"));
-
- // OR函数
- this.addFunction("OR",new OrFunction("OR"));
- }
-
- public void addMathFunction() {
- // ABS函数
- this.addFunction("ABS",new AbsFunction("ABS"));
-
- // AVERAGE函数
- this.addFunction("AVERAGE",new AvgFunction("AVERAGE"));
-
- // CEILING函数
- this.addFunction("CEILING",new CeilingFunction("CEILING"));
-
- // RADIANS函数
- this.addFunction("RADIANS",new RadiansFunction("RADIANS"));
-
- // COS函数
- this.addFunction("COS",new CosFunction("COS"));
-
- // COT函数
- this.addFunction("COT",new CotFunction("COT"));
-
- // COUNT函数
- this.addFunction("COUNT",new CountFunction("COUNT"));
-
- // COUNTIF函数
- this.addFunction("COUNTIF",new CountIfFunction("COUNTIF"));
-
- // FIXED函数
- this.addFunction("FIXED",new FixedFunction("FIXED"));
-
- // FLOOR函数
- this.addFunction("FLOOR",new FloorFunction("FLOOR"));
-
- // INT函数
- this.addFunction("INT",new IntFunction("INT"));
-
- // LARGE函数
- this.addFunction("LARGE",new LargeFunction("LARGE"));
-
- // LOG函数
- this.addFunction("LOG",new LogFunction("LOG"));
-
- // MAX函数
- this.addFunction("MAX",new MaxFunction("MAX"));
-
- // MIN函数
- this.addFunction("MIN",new MinFunction("MIN"));
-
- // MOD函数
- this.addFunction("MOD",new ModFunction("MOD"));
-
- // POWER函数
- this.addFunction("POWER",new PowerFunction("POWER"));
-
- // PRODUCT函数
- this.addFunction("PRODUCT",new ProductFunction("PRODUCT"));
-
- // RAND函数
- this.addFunction("RAND",new RandFunction("RAND"));
-
- // ROUND函数
- this.addFunction("ROUND",new RoundFunction("ROUND"));
-
- // SIN函数
- this.addFunction("SIN",new SinFunction("SIN"));
-
- // SMALL函数
- this.addFunction("SMALL",new SmallFunction("SMALL"));
-
- // SQRT函数
- this.addFunction("SQRT",new SqrtFunction("SQRT"));
-
- // SUM函数
- this.addFunction("SUM",new SumFunction("SUM"));
-
- // SUMIF函数
- this.addFunction("SUMIF",new SumIfFunction("SUMIF"));
-
- // SUMIFS函数
- this.addFunction("SUMIFS",new SumIfsFunction("SUMIFS"));
-
- // SUMPRODUCT函数
- this.addFunction("SUMPRODUCT",new SumProductFunction("SUMPRODUCT"));
-
- // TAN函数
- this.addFunction("TAN",new TanFunction("TAN"));
-
- }
- }
创建测试用例
- package com.ql.util.express.self.combat;
-
- import com.ql.util.express.DefaultContext;
- import com.ql.util.express.self.combat.ext.FormulaRunner;
- import org.junit.Test;
-
- /**
- * 类描述: 实战测试类
- *
- * @author admin
- * @version 1.0.0
- * @date 2023/11/21 15:45
- */
- public class CombatTest {
-
- @Test
- public void CONCATENATE() throws Exception{
-
- FormulaRunner formulaRunner = new FormulaRunner(true,true);
- // 创建上下文
- DefaultContext<String, Object> context = new DefaultContext<>();
- String express = "CONCATENATE(姓名,'-',学号)";
- context.put("姓名","孙悟空");
- context.put("学号","95001");
- Object object = formulaRunner.execute(express, context, null, true, true);
- System.out.println(object);
- }
-
- }
运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。