当前位置:   article > 正文

47.仿简道云公式函数实战-文本函数-CONCATENATE

47.仿简道云公式函数实战-文本函数-CONCATENATE

1. CONCATENATE函数

将多个文本字符串合并成一个文本字符串。

2. 函数用法

CONCATENATE(text1,[text2], …)

例如函数 CONCATENATE(A,B,C),返回值为 ABC。

注:字段或者函数之间,用逗号隔开;如果是字符串,需要用引号包裹起来。

3. 函数示例

将姓名和学号连起来成为一个新的字符串。

4. 代码实战

首先我们在function包下创建text包,在text包下创建ConcatenateFunction类,代码如下:

  1. package com.ql.util.express.self.combat.function.text;
  2. import com.ql.util.express.Operator;
  3. import com.ql.util.express.self.combat.exception.FormulaException;
  4. import java.util.Arrays;
  5. /**
  6. * 类描述: CONCATENATE函数
  7. *
  8. * @author admin
  9. * @version 1.0.0
  10. * @date 2023/11/24 13:24
  11. */
  12. public class ConcatenateFunction extends Operator {
  13. public ConcatenateFunction(String name) {
  14. this.name = name;
  15. }
  16. @Override
  17. public Object executeInner(Object[] list) throws Exception {
  18. if (list.length == 0) {
  19. throw new FormulaException("操作数异常");
  20. }
  21. StringBuilder sb = new StringBuilder();
  22. Arrays.stream(list).forEach(entity->sb.append(entity));
  23. return sb.toString();
  24. }
  25. }

把ConcatenateFunction类注册到公式函数入口类中,代码如下:

  1. package com.ql.util.express.self.combat.ext;
  2. import com.ql.util.express.ExpressRunner;
  3. import com.ql.util.express.IExpressResourceLoader;
  4. import com.ql.util.express.parse.NodeTypeManager;
  5. import com.ql.util.express.self.combat.function.logic.*;
  6. import com.ql.util.express.self.combat.function.math.*;
  7. import com.ql.util.express.self.combat.function.text.CharFunction;
  8. import com.ql.util.express.self.combat.function.text.ConcatenateFunction;
  9. /**
  10. * 类描述: 仿简道云公式函数实战入口类
  11. *
  12. * @author admin
  13. * @version 1.0.0
  14. * @date 2023/11/21 15:29
  15. */
  16. public class FormulaRunner extends ExpressRunner {
  17. public FormulaRunner() {
  18. super();
  19. }
  20. public FormulaRunner(boolean isPrecise, boolean isTrace) {
  21. super(isPrecise,isTrace);
  22. }
  23. public FormulaRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) {
  24. super(isPrecise,isStrace,nodeTypeManager);
  25. }
  26. public FormulaRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, NodeTypeManager nodeTypeManager) {
  27. super(isPrecise,isTrace,iExpressResourceLoader,nodeTypeManager);
  28. }
  29. @Override
  30. public void addSystemFunctions() {
  31. // ExpressRunner 的内部系统函数
  32. super.addSystemFunctions();
  33. // 扩展公式函数
  34. this.customFunction();
  35. }
  36. /***
  37. * 自定义公式函数
  38. */
  39. public void customFunction() {
  40. // 逻辑公式函数
  41. this.addLogicFunction();
  42. // 数学公式函数
  43. this.addMathFunction();
  44. // 文本函数
  45. this.addTextFunction();
  46. }
  47. public void addTextFunction() {
  48. // CHAR函数
  49. this.addFunction("CHAR",new CharFunction("CHAR"));
  50. // CONCATENATE函数
  51. this.addFunction("CONCATENATE",new ConcatenateFunction("CONCATENATE"));
  52. }
  53. public void addLogicFunction() {
  54. // AND函数
  55. this.addFunction("AND",new AndFunction("AND"));
  56. // IF函数
  57. this.addFunction("IF",new IfFunction("IF"));
  58. // IFS函数
  59. this.addFunction("IFS",new IfsFunction("IFS"));
  60. // XOR函数
  61. this.addFunction("XOR",new XorFunction("XOR"));
  62. // TRUE函数
  63. this.addFunction("TRUE",new TrueFunction("TRUE"));
  64. // FALSE函数
  65. this.addFunction("FALSE",new FalseFunction("FALSE"));
  66. // NOT函数
  67. this.addFunction("NOT",new NotFunction("NOT"));
  68. // OR函数
  69. this.addFunction("OR",new OrFunction("OR"));
  70. }
  71. public void addMathFunction() {
  72. // ABS函数
  73. this.addFunction("ABS",new AbsFunction("ABS"));
  74. // AVERAGE函数
  75. this.addFunction("AVERAGE",new AvgFunction("AVERAGE"));
  76. // CEILING函数
  77. this.addFunction("CEILING",new CeilingFunction("CEILING"));
  78. // RADIANS函数
  79. this.addFunction("RADIANS",new RadiansFunction("RADIANS"));
  80. // COS函数
  81. this.addFunction("COS",new CosFunction("COS"));
  82. // COT函数
  83. this.addFunction("COT",new CotFunction("COT"));
  84. // COUNT函数
  85. this.addFunction("COUNT",new CountFunction("COUNT"));
  86. // COUNTIF函数
  87. this.addFunction("COUNTIF",new CountIfFunction("COUNTIF"));
  88. // FIXED函数
  89. this.addFunction("FIXED",new FixedFunction("FIXED"));
  90. // FLOOR函数
  91. this.addFunction("FLOOR",new FloorFunction("FLOOR"));
  92. // INT函数
  93. this.addFunction("INT",new IntFunction("INT"));
  94. // LARGE函数
  95. this.addFunction("LARGE",new LargeFunction("LARGE"));
  96. // LOG函数
  97. this.addFunction("LOG",new LogFunction("LOG"));
  98. // MAX函数
  99. this.addFunction("MAX",new MaxFunction("MAX"));
  100. // MIN函数
  101. this.addFunction("MIN",new MinFunction("MIN"));
  102. // MOD函数
  103. this.addFunction("MOD",new ModFunction("MOD"));
  104. // POWER函数
  105. this.addFunction("POWER",new PowerFunction("POWER"));
  106. // PRODUCT函数
  107. this.addFunction("PRODUCT",new ProductFunction("PRODUCT"));
  108. // RAND函数
  109. this.addFunction("RAND",new RandFunction("RAND"));
  110. // ROUND函数
  111. this.addFunction("ROUND",new RoundFunction("ROUND"));
  112. // SIN函数
  113. this.addFunction("SIN",new SinFunction("SIN"));
  114. // SMALL函数
  115. this.addFunction("SMALL",new SmallFunction("SMALL"));
  116. // SQRT函数
  117. this.addFunction("SQRT",new SqrtFunction("SQRT"));
  118. // SUM函数
  119. this.addFunction("SUM",new SumFunction("SUM"));
  120. // SUMIF函数
  121. this.addFunction("SUMIF",new SumIfFunction("SUMIF"));
  122. // SUMIFS函数
  123. this.addFunction("SUMIFS",new SumIfsFunction("SUMIFS"));
  124. // SUMPRODUCT函数
  125. this.addFunction("SUMPRODUCT",new SumProductFunction("SUMPRODUCT"));
  126. // TAN函数
  127. this.addFunction("TAN",new TanFunction("TAN"));
  128. }
  129. }

创建测试用例

  1. package com.ql.util.express.self.combat;
  2. import com.ql.util.express.DefaultContext;
  3. import com.ql.util.express.self.combat.ext.FormulaRunner;
  4. import org.junit.Test;
  5. /**
  6. * 类描述: 实战测试类
  7. *
  8. * @author admin
  9. * @version 1.0.0
  10. * @date 2023/11/21 15:45
  11. */
  12. public class CombatTest {
  13. @Test
  14. public void CONCATENATE() throws Exception{
  15. FormulaRunner formulaRunner = new FormulaRunner(true,true);
  16. // 创建上下文
  17. DefaultContext<String, Object> context = new DefaultContext<>();
  18. String express = "CONCATENATE(姓名,'-',学号)";
  19. context.put("姓名","孙悟空");
  20. context.put("学号","95001");
  21. Object object = formulaRunner.execute(express, context, null, true, true);
  22. System.out.println(object);
  23. }
  24. }

运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/156062
推荐阅读
相关标签
  

闽ICP备14008679号