String.format
で桁数を揃えたあとreplaceで空白を任意の文字に置き換えることで、0埋めができる。
public static void main (String[] args) throws java.lang.Exception { System.out.println(zeroPadding("12345",10)); // 0000012345 System.out.println(blankPadding("t e s t",10)); // t e s t // 先頭の文字列以外の空白も置換してしまうので、 // 0埋めは空白を含む文字列には使えない System.out.println(zeroPadding("t e s t",10)); // 000t0e0s0t } /** * lengthで指定した桁数まで空白埋めした文字列を返却する * @param input 入力文字列 * @param length 空白埋めする桁数 * @return length分まで空文字を付加したinput */ public static String blankPadding(String input, int length){ return String.format("%" + length + "s", input); } /** * lengthで指定した桁数までゼロ埋めした文字列を返却する * @param input 入力文字列 * @param length ゼロ埋めする桁数 * @return length分まで0を付加したinput */ public static String zeroPadding(String input, int length){ return String.format("%" + length + "s", input).replace(" ", "0"); }
もし先頭以外に空白が入りうる文字列を0埋めする場合、
先に必要な文字数分作ってからつなげて返すのが良さそう。
/** * lengthで指定した桁数までゼロ埋めした文字列を返却する * 与えられた文字列よりlengthが短い場合、そのまま返却する * @param input 入力文字列 * @param length ゼロ埋めする桁数 * @return length分まで0を付加したinput */ public static String zeroPadding(String input, int length){ int l = length - input.length(); if (l > 0){ String pad = String.format("%" + l + "s", "") .replace(" ", "0"); return pad + input; }else{ return input; } }
行頭に付加した0を除去する場合は下記で
public static String zeroSuppress(String input){ return input.replaceAll("^0{1,}", ""); }