●1 テンプレートリプレースとは?
テンプレートリプレースは、簡単に言うとテキストファイルの一部分をプログラムで書き換えるための仕組みです。
Javaでこの機能を実装しようとした場合、「JDKのMessageFormat」や「JakartaプロジェクトのVelocity」などのが存在します。
では、なぜわざわざテンプレートリプレースを作ったのかというと、「JDKのMessageFormat」には、置換対象を10個までしか
指定できないという問題があり、「JakartaプロジェクトのVelocity」を利用するのは結構めんどくさい事と、オープンソースを
気軽に利用できないプロジェクトでもテンプレートエンジンを活用したいケースがあったからです。
●2 クラス概要
TemplateReplaceクラスは、文字列テンプレート中の左大括弧と右大括弧で括られた文字列を置換インデックスとして、
置換用に設定した内容に置換します。
ソースコードは、200ステップ程度なので必要に応じて改良して使ってください。
●3 TemplateReplaceの使い方
@.置換情報配列を利用
置換情報配列を利用すると大量の置換情報をセットするのが容易ですが、置換情報はシーケンシャルにしか設定できません。
(初期設定の状態では、置換対象の置換情報が設定されていない置換インデックスの内容は置換しないようにしています。)
サンプル
String str = "aaa {0} bbb {1} ccc {2} ddd {3}";
String [] args = {"000", "111"};
TemplateReplace templateReplace = new TemplateReplace(str);
System.out.println("str:" + templateReplace.replace(args));
処理結果
str:aaa 000 bbb 111 ccc {2} ddd {3}
A.置換情報配列を利用(置換対象がない場合は空文字に変換)
置換情報配列を利用すると大量の置換情報をセットするのが容易ですが、置換情報はシーケンシャルにしか設定できません。
(setIgnoreNull()メソッドで、置換対象がない場合に空文字に置換されるように設定できます。)
サンプル
String str = "aaa {0} bbb {1} ccc {2} ddd {3}";
String [] args = {"000", "111"};
TemplateReplace templateReplace = new TemplateReplace(str);
templateReplace.setIgnoreNull(true);
System.out.println("str:" + templateReplace.replace(args));
処理結果
str:aaa 000 bbb 111 ccc ddd
B.置換情報を個別設定(置換インデックスに数値を利用)
置換情報の設定に配列を使わずに、個別に設定していくと全ての置換対象を設定する必要がなくなります。
サンプル
String str = "aaa {0} bbb {1} ccc {2} ddd {3}";
TemplateReplace templateReplace = new TemplateReplace(str);
templateReplace.putArgs(1,"111");
templateReplace.putArgs(3,"333");
System.out.println("str:" + templateReplace.replace());
処理結果
str:aaa {0} bbb 111 ccc {2} ddd 333
C.置換情報を個別設定(置換インデックスに文字列を利用)
置換インデックスに文字列を利用すると、各々の置換対象の意味付けが出来るのでテンプレートの可読性が高くなります。
サンプル
String str = "aaa {index0} bbb {index1} ccc {index2} ddd {index3}";
TemplateReplace templateReplace = new TemplateReplace(str);
templateReplace.putArgs("index1","111");
templateReplace.putArgs("index3","333");
System.out.println("str:" + templateReplace.replace());
処理結果
str:aaa {index0} bbb 111 ccc {index2} ddd 333
D.置換情報の変更
置換情報を変更したい場合は、clearArgs()メソッドで置換情報を初期化できます。
サンプル
String str = "aaa {index0} bbb {index1} ccc {index2} ddd {index3}";
TemplateReplace templateReplace = new TemplateReplace(str);
templateReplace.putArgs("index0","000");
templateReplace.putArgs("index1","111");
System.out.println("str:" + templateReplace.replace());
// 置換情報の初期化
templateReplace.clearArgs();
templateReplace.putArgs("index2","222");
templateReplace.putArgs("index3","333");
System.out.println("str:" + templateReplace.replace());
処理結果
str:aaa 000 bbb 111 ccc {index2} ddd {index3}
str:aaa {index0} bbb {index1} ccc 222 ddd 333
|