web-dev-qa-db-fra.com

Pouvons-nous utiliser String.format () pour compléter/préfixer avec un caractère de la longueur souhaitée?

Peut Java.lang.String.format(String str, String str1) être utilisé pour ajouter le préfixe d'un caractère particulier.

Je pourrais le faire pour un nombre comme:

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

Cela donne un Stringde longueur 32 et laissé à gauche avec 0s: 00000000000000000000000000202022

Comment obtenir la même chose lorsque sendID est un Stringcomme:

String sendID = "AABB";

Et je veux une sortie comme: 0000000000000000000000000000AABB

12
Swagatika

Vous pouvez utiliser cette méthode pour obtenir votre sortie:

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

Démo: http://ideone.com/UNVjqS

16
anubhava

Vous pouvez faire comme ci-dessous si vous voulez vraiment utiliser String.format,

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

Autre que String.format, vous pouvez trouver de nombreuses solutions ici .

Edit : Merci à Brian pour le point de la question. Ce qui précède ne fonctionnera pas pour les entrées avec des espaces. Vous pouvez essayer comme ci-dessous. Mais je ne suggérerai pas l'opération ci-dessous car elle comporte trop d'opérations de chaîne. 

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

Vous pouvez également essayer d’utiliser StringUtils.leftPad

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

Vous ne pouvez pas utiliser String.format() pour le remplissage avec des caractères arbitraires. Peut-être Apache Commons StringUtils.leftPad () serait-il utile pour une solution concise? Notez qu'il y a aussi une StringUtils.rightPad() aussi.

5
Brian Agnew

Je viens d'ajouter du code Java 8 si quelqu'un en a besoin à l'avenir:

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

}

Cette version supporte l'ajout de n'importe quel caractère comme padding

2
Koziołek

Voici comment j'ai résolu ce problème en utilisant la fonction de base jdks String.format.

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