117 votes

Génère des chaînes de longueur fixe remplies d'espaces.

J'ai besoin de produire une chaîne de longueur fixe pour générer un fichier basé sur la position des caractères. Les caractères manquants doivent être remplis par un espace.

Par exemple, le champ CITY a une longueur fixe de 15 caractères. Pour les entrées "Chicago" et "Rio de Janeiro", les sorties sont les suivantes

"        Chicago"
" Rio de Janeiro".

143voto

Rafael Borja Points 596

Depuis Java 1.5, nous pouvons utiliser la méthode java.lang.String.format(String, Object...) et utiliser le format printf.

La chaîne de format "%1$15s" faire le travail. Où 1$ indique l'index de l'argument, s indique que l'argument est un String et 15 représente la largeur minimale de la corde. Tout mettre en place : "%1$15s" .

Pour une méthode générale, nous avons :

public static String fixedLengthString(String string, int length) {
    return String.format("%1$"+length+ "s", string);
}

Peut-être quelqu'un peut-il suggérer une autre chaîne de format pour remplir les espaces vides avec un caractère spécifique ?

63voto

mike Points 1239

Utilisez le site String.format Les espaces sont remplacés par le caractère souhaité.

String toPad = "Apple";
String padded = String.format("%8s", toPad).replace(' ', '0');
System.out.println(padded);

Imprimés 000Apple .


Mise à jour version plus performante (puisqu'elle ne repose pas sur des String.format ), qui n'a aucun problème avec les espaces (merci à Rafael Borja pour l'astuce).

int width = 10;
char fill = '0';

String toPad = "New York";
String padded = new String(new char[width - toPad.length()]).replace('\0', fill) + toPad;
System.out.println(padded);

Imprimés 00New York .

Mais une vérification doit être ajoutée pour empêcher la tentative de création d'un tableau de caractères avec une longueur négative.

35voto

Kurt Huwig Points 86

Ce code aura exactement le nombre de caractères indiqué, rempli d'espaces ou tronqué sur le côté droit :

private String leftpad(String text, int length) {
    return String.format("%" + length + "." + length + "s", text);
}

private String rightpad(String text, int length) {
    return String.format("%-" + length + "." + length + "s", text);
}

17voto

Bui Dinh Ngoc Points 34

Pour le tampon droit, il faut String.format("%0$-15s", str)

es decir - le signe sera "droit" pad et aucun - le signe sera "gauche" pad

Voir mon exemple :

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("================================");
            for(int i=0;i<3;i++)
            {
                String s1=sc.nextLine();

                Scanner line = new Scanner( s1);
                line=line.useDelimiter(" ");

                String language = line.next();
                int mark = line.nextInt();;

                System.out.printf("%s%03d\n",String.format("%0$-15s", language),mark);

            }
            System.out.println("================================");

    }
}

L'entrée doit être une chaîne de caractères et un nombre

exemple d'entrée : Google 1

15voto

JGFMK Points 405
String.format("%15s",s) // pads left
String.format("%-15s",s) // pads right

Excellent résumé aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X