String中的条件 - Java属性文件

时间:2016-02-07 16:29:11

标签: java properties

拥有如下所示的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代码依赖,因为查询模式可以更改。

1 个答案:

答案 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} =“”什么时候没有地址)。这对你来说是否可行?