2017-01-22 8 views
1

私はJava Velocityテンプレートの初心者です。私はいくつかの数値のプレースホルダー/変数を持つStringを持っています。私はそれらを対応する値に置き換える必要があります。どうすればJavaでこれを達成できますか?VelocityTemplateを使用してインデックスを値に置き換えます。

コードサンプル:コードの上

String templateString = "Replacing $0 with its value."; 
VelocityContext context = new VelocityContext(); 
context.put("0", "Sample value"); 

StringWriter output = new StringWriter(); 
Velocity.evaluate(context, output, "log or null", templateString); 

System.out.println("output: " + output); 

は「サンプル値」で変数$ 0を置き換えるものではありませんでしたが、私が代わりに$ 0プレースホルダ/変数として文字列を持っていたとき、それが働きました。 $ 0をその値に置き換えるための回避策はありますか?これについてあなたの助けを感謝します。

ありがとうございました。

答えて

1

Velocity自体には回避策はありません。パーサでは、参照名を数字で始めることはできません。

だからあなたのようなもので、テンプレートを事前処理する必要があります:

templateString = templateString.replaceAll("\\$(\\d+)","\\$_$1"); 
context.put("_0", "Sample value"); 
... 
+0

どうもありがとうクロード。このソリューションは私のために働いた。 コンテンツが大きくなるとパフォーマンスに関連する問題が発生する可能性があるかどうかを知る必要があるだけでなく、この方法がコーディング標準に違反していないかどうかを知る必要もあります。 –

+0

はい、明らかにパフォーマンス上の懸念がありますが、確かに少しハッキリしています... –

関連する問題