web-dev-qa-db-ja.com

String.format()を使用して、必要な長さの文字をパディング/プレフィックスできますか?

特定の文字の接頭辞を追加するためにJava.lang.String.format(String str, String str1)を使用できます。

私はこれを次のような数に対して行うことができます:

int sendID = 202022;
String usiSuffix = String.format("%032d", sendID);

これは、長さ32のStringを作成し、0で左パディングします。00000000000000000000000000202022

SendIDがStringのような場合に同じことを行う方法:

String sendID = "AABB";

そして、私は次のような出力が必要です:0000000000000000000000000000AABB

12
Swagatika

次のハックな方法を使用して出力を取得できます。

String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);

デモ: http://ideone.com/UNVjqS

16
anubhava

String.formatを本当に使用したい場合は、以下のようにすることができます。

String sendID = "AABB";
String.format("%32s", sendID ).replace(' ', '0')

String.format以外にも、多くの解決策を見つけることができます ここ

編集:問題を指摘してくれたブライアンに感謝します。上記は、スペースを含む入力では機能しません。以下のようにしてみてください。ただし、文字列操作が多すぎるため、以下の操作はお勧めしません。

String sendID = "AA BB";
String suffix = String.format("%32s", "").replace(' ', '0') + sendID;
sendID = suffix.substring(sendID.length());

StringUtils.leftPad を使用することもできます

StringUtils.leftPad(sendID, 32 - sendID.length(), '0');
12
Jayamohan

任意の文字を埋め込むためにString.format()を使用することはできません。たぶん、Apache Commons StringUtils.leftPad() は、簡潔な解決策として役立ちますか? StringUtils.rightPad()もあることに注意してください。

5
Brian Agnew

Java 8コードをあとで誰かが必要に応じて追加するだけです:

public class App {
    public static void main(String[] args) {
        System.out.println(leftpad("m m", 2, '@'));
        System.out.println(leftpad("m m", 5, '@'));
    }

    static String leftpad(String s, int nb, char pad) {
        return Optional.of(nb - s.length())
                .filter(i -> i > 0)
                .map(i-> String.format("%" + i + "s", "").replace(" ", pad + "") + s)
                .orElse(s);
    }

}

このバージョンでは、任意の文字をパディングとして追加できます

2
Koziołek

これは、ベースのjdks String.format関数を使用してこの問題を解決した方法です

String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")
0
user3534893