文字列操作(RPad,LPad) 空白埋め

たまに必要になるJavaでのRPAD,LPADの書き方を紹介します。

ライブラリに制限がある場合と、
ライブラリ制限なしの場合の二つを紹介します。


■ライブラリに制限がある場合
このサイトで紹介されているロジックがいい感じ。
Java LPAD、RPADで整形 / Chat&Messenger

/**
 * LPADを行います。 
 * 文字列[str]の左に指定した文字列[addStr]を[len]に
 * 満たすまで挿入します。
 * @param str 対象文字列
 * @param len 補充するまでの桁数(LPADを行った後のサイズを指定します。)
 * @param addStr 挿入する文字列
 * @return 変換後の文字列。
 */
public static String lpad(String str, int len, String addStr) {
    return fillString(str, "L", len, addStr);
}

/**
 * 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);
}


■ライブラリ制限なしの場合
Apache Commons のLangライブラリを利用します。

ここからダウンロード(最新versionのcommons-lang-X.X-bin.zip)
Lang – Download Apache Commons Lang

StringUtilsクラスを利用します。
[API JavaDoc]
http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html
※記事作成時最新ver2.6


★使用方法

	public static void main(String[] args) {
		String str = "mogemoge";
		int size = 5;
		String delim = " ";
		//ライブラリ制限ありの場合
		System.out.println(StringUtil.rpad(str, size, delim));
		//ライブラリ制限なしの場合
		System.out.println(StringUtils.substring(StringUtils.rightPad(str, size, delim),0,size));
	}

紹介したロジック仕様に若干違いがあるので、上記のようにすると同じ結果になります。

StringUtilクラスに"ライブラリに制限がある場合"のメソッドを記述しています。

★処理結果
mogem
mogem