it-swarm.com.de

Können wir String.format () verwenden, um ein Zeichen mit der gewünschten Länge mit einem Präfix zu versehen?

Kann Java.lang.String.format(String str, String str1) zum Hinzufügen eines Präfixes eines bestimmten Zeichens verwendet werden.

Ich könnte das für eine Zahl wie:

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

Es wird eine String mit der Länge 32 erstellt und mit 0s aufgefüllt: 00000000000000000000000000202022

So erreichen Sie dasselbe, wenn sendID eine String ist:

String sendID = "AABB";

Und ich möchte eine Ausgabe wie: 0000000000000000000000000000AABB

12
Swagatika

Auf diese hackhafte Weise können Sie Ihre Ausgabe abrufen:

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

Demo: http://ideone.com/UNVjqS

16
anubhava

Sie können wie folgt vorgehen, wenn Sie String.format wirklich verwenden möchten.

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

Neben String.format gibt es viele Lösungen hier .

Edit : Danke, dass Brian auf das Problem aufmerksam macht. Das obige funktioniert nicht für die Eingabe mit Leerzeichen. Sie können es wie folgt versuchen. Ich schlage jedoch nicht die unten beschriebene Operation vor, da sie zu viele String-Operationen hat. 

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

Sie können auch versuchen, StringUtils.leftPad zu verwenden.

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

Sie können String.format() nicht für das Auffüllen mit beliebigen Zeichen verwenden. Vielleicht wäre Apache Commons StringUtils.leftPad () für eine prägnante Lösung hilfreich? Beachten Sie, dass es auch eine StringUtils.rightPad() gibt.

5
Brian Agnew

Ich füge nur etwas Java 8-Code hinzu, falls er in Zukunft benötigt wird:

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

}

Diese Version unterstützt das Hinzufügen eines beliebigen Zeichens als Auffüllung

2
Koziołek

So habe ich dieses Problem mit der Basisfunktion jdks String.format gelöst

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