Java 在数据库中存储公式,需要在运行时替换值
有一个实体是我存储在数据库中的工业部分。根据用户输入,我们需要计算每个所需工业零件的数量。我们根据每个工业部件以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正则表达式来实现这一点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个用户输入,公式也非常
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或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)