のようなものの標準的な、または少なくとも広く普及している実装はありますString.format
が、名前付きの引数がありますか?
テンプレート化された文字列を次のようにフォーマットしたいと思います。
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;
}