12

java.lang.String.format(String str, String str1)特定の文字のプレフィックスを追加するために使用できます。

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

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

String長さは32で、左に0が埋め込まれます。00000000000000000000000000202022

sendIDが次のStringような場合に同じことを実現する方法:

String sendID = "AABB";

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

4

5 に答える 5

17

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

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

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

于 2013-03-26T11:10:37.983 に答える
13

本当に使いたいなら、以下のようにできます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');
于 2013-03-26T11:03:02.477 に答える
5

String.format()任意の文字のパディングには使用できません。おそらく、Apache Commons StringUtils.leftPad()は、簡潔なソリューションに役立つでしょうか?もあることに注意してくださいStringUtils.rightPad()

于 2013-03-26T11:04:05.520 に答える
2

誰かが将来必要になった場合は、Java8コードを追加するだけです。

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

}

このバージョンは、パディングとして任意の文字を追加することをサポートしています

于 2016-03-25T10:15:11.827 に答える
0

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

String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")
于 2014-04-15T07:35:52.237 に答える