Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数据库中存储公式,需要在运行时替换值_Java_Regex - Fatal编程技术网

Java 在数据库中存储公式,需要在运行时替换值

Java 在数据库中存储公式,需要在运行时替换值,java,regex,Java,Regex,有一个实体是我存储在数据库中的工业部分。根据用户输入,我们需要计算每个所需工业零件的数量。我们根据每个工业部件以db为单位存储的公式计算这个数字 第1部分->公式=(输入1+输入2)/(输入3) 第2部分->公式=(输入1*输入2*输入3) 所以当用户输入input1=4 input2=6 input3=2时 我需要打电话计算零件的数量。 零件编号1-(4+6)/2=5 零件2s的mo-(4*6*2)=48 我可以通过字符串操作来实现这一点,但这变得非常复杂,因为我有超过7个用户输入,公式也非常

有一个实体是我存储在数据库中的工业部分。根据用户输入,我们需要计算每个所需工业零件的数量。我们根据每个工业部件以db为单位存储的公式计算这个数字

第1部分->公式=(输入1+输入2)/(输入3) 第2部分->公式=(输入1*输入2*输入3)

所以当用户输入input1=4 input2=6 input3=2时 我需要打电话计算零件的数量。 零件编号1-(4+6)/2=5 零件2s的mo-(4*6*2)=48

我可以通过字符串操作来实现这一点,但这变得非常复杂,因为我有超过7个用户输入,公式也非常复杂

有没有更好的办法

Update1我尝试使用java正则表达式来实现这一点

                    String[] validInputs = {"halfs", "fulls", "noOfPartitions"};
    List<String> validInputsList = Arrays.asList(validInputs);
    HashMap inputMap = new HashMap();
    inputMap.put("halfs", 3);
    inputMap.put("fulls", 3);
    inputMap.put("noOfPartitions", 2);
    String formula = "(halfs+fulls)/noOfPartitions";
    Iterator iter = inputMap.keySet().iterator();
    while(iter.hasNext()) {

          String key = (String)iter.next();
          Pattern p = Pattern.compile(key);
            // get a matcher object
            Matcher m = p.matcher(formula);
            formula = m.replaceAll(inputMap.get(key).toString());

    }
    System.out.println(formula);
  • 用groovy脚本编写公式
  • 将脚本存储在DB中
  • Java6对动态语言有很好的支持。这是你的电话号码

  • 这里是详细的教程

    您要我将字符串操作逻辑放在groovy或java脚本中?我也可以用Java实现,对吗?
            def inputMap = ['halfs':3, 'fulls':3,'noOfPartitions':2]
    def formula = '(halfs+fulls)/noOfPartitions'
    inputMap.each { entry -> 
    
        def pat = ~entry.key
        assert pat instanceof java.util.regex.Pattern
        def matcher = (formula =~ /$pat/)
        formula = matcher.replaceAll((inputMap.get(entry.key)).toString())
        assert matcher instanceof java.util.regex.Matcher
    
    }
    System.out.println(formula)
    Eval.me(formula)