拥有如下所示的java属性
sample.properties
query={name} in {address:-}
目前使用StrSubstitutor替换值
valuesMap.put("name", "Har");
valuesMap.put("address", "Park Street");
String queryString= properties.get("query");
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String resolvedString = sub.replace(queryString);
在Park Street的resolvedString = Har
我需要的是,如果"地址"不可用,已解析的字符串应为:
resolvedString = Har 而不是 resolvedString = Har
是否可以使用StrSubstitutor或使用模板引擎等其他方式实现此目的?
不希望任何Java代码依赖,因为查询模式可以更改。
答案 0 :(得分:1)
这可能是一种不失一般性的方法:
query1={name} in {address}
query2={name}
...
String queryString;
if (valueMap.get("address") == "") {
queryString= properties.get("query2");
} else {
queryString= properties.get("query1");
}
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String resolvedString = sub.replace(queryString);
以这种方式即使将来查询必须改变,你也能够管理这两种情况之间的差异。
编辑:如果将来你想要在评论中添加新的属性: {name}为{address}
中的{alias}我认为继续进行的方法可能是将“as”和“in”放入查询中: query = {name} {as} {alias} {in} {address}
并以正确的方式填充数据库或valueMap(不知道数据来自应用程序的位置))(当没有“alias”和{in} =“”时,{as} =“”什么时候没有地址)。这对你来说是否可行?