有一个像下面这样的java属性
样本.属性
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);
resolvedString = Har 位于公园街
我需要的是,如果“地址”不可用,则解析后的字符串应为:
resolvedString = Har而不是resolvedString = Har in
是否可以使用 StrSubstitutor 或通过任何其他方式(例如使用模板引擎)来实现此目的?
不需要任何 Java 代码依赖性,因为查询模式可能会改变。
最佳答案
这可能是一种不失去通用性的方法:
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”放入查询中: 查询 = {名称} {as} {别名} {in} {地址}
并以正确的方式填充数据库或valueMap(不知道数据来自应用程序中的何处))(因此当没有“别名”和{in}=""时为{as}=""当没有地址时)。这对你来说可行吗?
关于java - 字符串中的条件 - Java 属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256001/