文字列操作(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