解析占位符
如何从下面的一个字符串中解析除占位符,并根据变量的类型替换。
"(<{AMT_field_value,string}> == nil ? false : string.contains( <{AMT_rule_value,string}>, <{AMT_field_value,array}>))
代码如下
import org.apache.flink.api.java.tuple.Tuple2;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @className: ExpressionParser
* @Description:
* @Author: wangyifei
* @Date: 2023/10/11 21:45
*/
public class ExpressionParser {
public static void main(String[] args) {
String str = "(<{AMT_field_value,string}> == nil ? false : string.contains( <{AMT_rule_value,string}>, <{AMT_field_value,array}>))";
Pattern p = Pattern.compile("<\\{(.*?)\\}>");
Matcher matcher = p.matcher(str);
String find = "";
String[] split = null ;
String key = null;
String value = null ;
String replace = str ;
Map<String,Object> parameter = new HashMap<>();
parameter.put("AMT_field_value","vvvv");
while (matcher.find()) {
find = matcher.group(1);
split = find.split("\\s*,\\s*");
key = split[0];
value = split[1];
replace = replace.replace("<{"+find+"}>" , String.valueOf(parameter.get(key)));
}
System.out.println(replace);
}
}