B-Teck!

お仕事からゲームまで幅広く

【Java】文字列の空白埋め、0埋め

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,}", "");
    }