是否存在像String.format
之類的標準或至少廣泛的實現,但帶有命名參數?具有命名參數的Java字符串templatizer/formatter
我想在這樣的方式來格式化模板化的字符串:
Map<String, Object> args = new HashMap<String, Object>();
args.put("PATH", "/usr/bin");
args.put("file", "foo");
String s = someHypotheticalMethod("#{PATH}/ls #{file}");
// "/usr/bin/ls foo"
技術上講,它幾乎一樣:
String[] args = new String[] { "/usr/bin", "foo" };
String s = String.format("%1$s/ls %2$s", args);
// "/usr/bin/ls foo"
但命名的參數。
我所知道的:
,但它們都使用命令或至少編號的參數,未命名的。我知道實現它是微不足道的,但是在標準Java庫或至少在Apache Commons/Guava /類似的東西中,是否存在一種機制,而沒有引入高調的模板引擎?
注意:我沒有完全成熟的模板引擎很感興趣,有像一些勢在必行/功能邏輯功能,流量控制,改性劑,分模板/夾雜物,迭代器等。通常,下面的方法是工作4行執行 - 這就是我所需要的:
public static String interpolate(String format, Map<String, ? extends Object> args) {
String out = format;
for (String arg : args.keySet()) {
out = Pattern.compile(Pattern.quote("#{" + arg + "}")).
matcher(out).
replaceAll(args.get(arg).toString());
}
return out;
}
任何你不僅僅使用「#」+ args.get(「PATH」)+「/ ls#」+ args.get(「file」)的理由? – Charles
我有一堆模板文件,我有一個參數圖,我需要從每個這些模板文件中獲取填充字符串。 – GreyCat