如何动态生成函数表达式???
例如有一个函数
Goto([[context,]extension,]priority)
其中context参数是可以省略的,extension也是可以省略的,priority参数必须;也就是有以下3中变体:
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority) 根据输入的参数生成对应的表达式
例如
输入context=1,extension=2,priority=3;则生成Goto(1,2,3)
输入extension=2,priority=3;则生成Goto(2,3)
输入priority=3;则生成Goto(3)输入context=1,priority=3;则生成Goto(3)
例如有一个函数
Goto([[context,]extension,]priority)
其中context参数是可以省略的,extension也是可以省略的,priority参数必须;也就是有以下3中变体:
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority) 根据输入的参数生成对应的表达式
例如
输入context=1,extension=2,priority=3;则生成Goto(1,2,3)
输入extension=2,priority=3;则生成Goto(2,3)
输入priority=3;则生成Goto(3)输入context=1,priority=3;则生成Goto(3)
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority)
就解决了啊调用的时候,java会根据传入参数的个数,判断调用的是哪个函数
你需要定义三个不同的方法'
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority) 然后程序调用时。如你只有一个参数.程序则自动调用
只有一个参数那个。以此类推.
而不是Goto(1,3)
如果像您说的那么简单就好了
根据提供输入的参数
context,extension,priority的值生成对应的表达试,我已经说的很清楚了啊?
输入context=1,extension=2,priority=3;则生成的语句为Goto(1,2,3)
输入extension=2,priority=3;则生成的语句为Goto(2,3)
输入priority=3;则生成Goto的语句为(3)
输入context=1,priority=3;则生成的语句为Goto(3)
感激不尽!!!
package test;import java.util.*;public class Test { public static void main(String[] args) {
String exp = "Goto([[context,]extension,]priority)";
String exp1 = "GotoIf(condition?label1[:label2])";
//String context = "IVRS_DYX_INCOMING";
//String extension = "s";
//String priority = "1";
Parameter parameter1 = new Parameter();
parameter1.setName("context");
parameter1.setType("string");
parameter1.setValue("IVRS_DYX_INCOMING");
parameter1.setMandatory(false);
parameter1.setSequence(new Integer(2));
Parameter parameter2 = new Parameter();
parameter2.setName("extension");
parameter2.setType("string");
parameter2.setValue("s");
parameter2.setMandatory(false);
parameter2.setSequence(new Integer(1));
Parameter parameter3 = new Parameter();
parameter3.setName("priority");
parameter3.setType("string");
parameter3.setValue("1");
parameter3.setMandatory(true);
parameter3.setSequence(new Integer(3));
Parameter[] pa = { parameter1,parameter2,parameter3 };
System.out.println(getExpression(exp,pa));
}
public static String getExpression(String expression, Parameter[] parameter) {
String[] expr = new String[parameter.length];
for(int ij=0;ij<parameter.length;ij++){
if (!parameter[ij].getMandatory()&&"".equals(parameter[ij].getValue())) {
int i = expression.indexOf(parameter[ij].getName());
if (i == -1) expr[i] = expression;
String ss = expression.substring(0, i);// left String
String sLeft = expression.substring(0, i);// left String
String sRight = expression.substring(i, expression.length());// right String
if (sRight.indexOf("]") == -1)
return "parameter value is mandatory";
// left String
int ii = 0;
int jj = -1;
while ((jj = sLeft.indexOf("]", jj + 1)) != -1) {
ii++;
}
//
for (int m = 0; m < ii; m++) {
ss = ss.substring(0, ss.lastIndexOf("["));
}
int iLeft = ss.lastIndexOf("[");
int iRight = sLeft.length() + sRight.indexOf("]");
expr[ij] = expression.substring(0, iLeft)
+ expression.substring(iRight + 1, expression.length());
}
else {
expr[ij] = expression;
}
}
String ee = expression;
for(int j=0;j<expr.length;j++){
if(expr[j].length()<=ee.length()){
ee = expr[j];
}
}
//return ee.replaceAll("\\[","").replaceAll("\\]","");
String e = ee.replaceAll("\\[","").replaceAll("\\]","");
for(int i=0;i<parameter.length;i++){
e=e.replaceAll(parameter[i].getName(),parameter[i].getValue());
}
return e;
}
××××××××××××××××××××××××××××××
package test;
public class Parameter{
private String name;
private String type;
private String value;
private boolean mandatory;
private Integer sequence;
public boolean getMandatory() {
return mandatory;
}
public void setMandatory(boolean mandatory) {
this.mandatory = mandatory;
}
public Integer getSequence() {
return sequence;
}
public void setSequence(Integer sequence) {
this.sequence = sequence;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
if context =1 {
Goto(priority)
}
这样总行了吧