import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static final String expressionPrefix = "${";
public static final String expressionSuffix = "}";
public static void main(String[] args) {
String context = "${a}我在$陷遮中${c}$2v2zrmv${e}";
List<String> list = parse(context);
// ["a","b","c","d","e"]
System.out.println(JSONObject.toJSON(list));
context = replace(context, "a", "1");
context = replace(context, "b", "2");
// 1我在2中${c}$k6vorwn${e}
System.out.println(context);
}
/**
* 將內(nèi)容中表達(dá)式替換為值
* @param context
* @param expressionValue 表達(dá)式中的值惭载,不包含前綴和后綴
* @param value
* @return
*/
public static String replace(String context, String expressionValue, String value){
String oldValue = expressionPrefix + expressionValue + expressionSuffix;
// 轉(zhuǎn)義正則表達(dá)式中的特殊字符
String escapedOldValue = oldValue.replaceAll("([\\[\\]{}()*+?.\\\\^$|])", "\\\\$1");
return context.replaceAll(escapedOldValue, value);
}
/**
* 解析所有表達(dá)式
* @param context
* @return
*/
public static List<String> parse(String context){
List<String> list = new ArrayList<>();
if(StringUtils.hasText(context)){
int root = 0;
while (true){
int start = context.indexOf(expressionPrefix, root);
if(start == -1){
break;
}
int end = context.indexOf(expressionSuffix, start + expressionPrefix.length());
if(end == -1){
break;
}else{
String tmp = context.substring(start + expressionPrefix.length(), end);
end = end + expressionSuffix.length();
list.add(tmp);
}
root = end;
}
}
return list;
}
}