Java LPAD、RPADで整形。文字列の左右に指定した文字を埋める
Javaで、文字列に対しSQL関数のLPAD、RPADと同様の処理を行うサンプルソースを紹介します。
これらは固定長フォーマットを扱うときに非常に便利です。
- LPAD・・・全体の文字数が指定の桁数になるように文字列の左側に繰り返し文字列を埋めて返します。
- RPAD・・・全体の文字数が指定の桁数になるように文字列の右側に繰り返し文字列を埋めて返します。
サンプルプログラム
/**
* RPADを行います。
* 文字列[str]の右に指定した文字列[addStr]を[len]に
* 満たすまで挿入します。
* @param str 対象文字列
* @param len 補充するまでの桁数(RPADを行った後のサイズを指定します。)
* @param addStr 挿入する文字列
* @return 変換後の文字列。
*/
public static String rpad(String str, int len, String addStr) {
return fillString(str, “R”, len, addStr);
}
/**
* 文字列[str]に対して、補充する文字列[addStr]を
* [position]の位置に[len]に満たすまで挿入します。
*
* ※[str]がnullや空リテラルの場合でも[addStr]を
* [len]に満たすまで挿入した結果を返します。
* @param str 対象文字列
* @param position 前に挿入 ⇒ L or l 後に挿入 ⇒ R or r
* @param len 補充するまでの桁数
* @param addStr 挿入する文字列
* @return 変換後の文字列。
*/
public static String fillString(String str, String position,
int len,
String addStr) {
if (addStr == null || addStr.length() == 0) {
throw new IllegalArgumentException
(“挿入する文字列の値が不正です。addStr=”+addStr);
}
if (str == null) {
str = “”;
}
StringBuffer buffer = new StringBuffer(str);
while (len > buffer.length()) {
if (position.equalsIgnoreCase(“l”)) {
int sum = buffer.length() + addStr.length();
if (sum > len) {
addStr = addStr.substring
(0,addStr.length() – (sum – len));
buffer.insert(0, addStr);
}else{
buffer.insert(0, addStr);
}
} else {
buffer.append(addStr);
}
}
if (buffer.length() == len) {
return buffer.toString();
}
return buffer.toString().substring(0, len);
}
実行結果
◆実行例
public static void main(String[] args) { // lpadの場合。5桁になるまで左にスペースを埋める。 String ret = lpad("abc", 5 , " "); System.out.println("'" + ret + "'"); // rpadの場合。5桁になるまで右にスペースを埋める。 ret = rpad("abc", 5 , " "); System.out.println("'" + ret + "'"); // nullの場合 ret = rpad(null, 5 , " "); System.out.println("'" + ret + "'"); }
◆出力結果
' abc' 'abc ' ' '