web-dev-qa-db-fra.com

Comment utiliser String.format () dans Java pour répliquer l'onglet "\ t"?

J'imprime les données ligne par ligne et je souhaite qu'elles soient organisées comme un tableau.

J'ai d'abord utilisé firstName + ", " + lastName + "\t" + phoneNumber.

Mais pour certains des plus grands noms, le numéro de téléphone est poussé hors de l'alignement

J'essaie d'utiliser String.format () pour obtenir cet effet. Quelqu'un peut-il me dire la syntaxe de format à utiliser?

J'ai essayé String.format("%s, %s, %20s", firstName, lastName, phoneNumber), mais ce n'est pas ce que je veux. Je veux que ça ressemble à ceci:

John, Smith 123456789

Bob, Madison 123456789

Charles, Richards 123456789

Edit: Ces réponses semblent fonctionner pour System.out.println (). Mais j'en ai besoin pour travailler pour un JTextArea. J'utilise textArea.setText ()

Ça a marché. JTextArea n'utilise pas de polices à espacement fixe par défaut. J'ai utilisé setFont () pour changer cela, et maintenant cela fonctionne comme un charme. Merci à tous pour les solutions.

16
ask

pensez à utiliser un nombre négatif pour votre spécificateur de longueur: %-20s. Par exemple:

   public static void main(String[] args) {
     String[] firstNames = {"Pete", "Jon", "Fred"};
     String[] lastNames = {"Klein", "Jones", "Flinstone"};
     String phoneNumber = "555-123-4567";

      for (int i = 0; i < firstNames.length; i++) {
        String foo = String.format("%-20s %s", lastNames[i] + ", " + 
             firstNames[i], phoneNumber);
        System.out.println(foo);
      }   
   }

retour

Klein, Pete          555-123-4567
Jones, Jon           555-123-4567
Flinstone, Fred      555-123-4567
23

Essayez de mettre la largeur dans le deuxième espace réservé avec - signe pour le remplissage droit comme:

  String.format("%s, %-20s %s", firstName, lastName, phoneNumber)

Cela donnera la largeur spécifiée au deuxième argument (nom de famille) avec un remplissage à droite et le numéro de téléphone démarrera uniquement après la chaîne de largeur spécifiée.

EDIT: Démo:

String firstName = "John";
String lastName = "Smith";
String phoneNumber = "1234456677";
System.out.println(String.format("%s, %-20s %s",firstName, lastName, phoneNumber));

impressions:

John, Smith 1234456677

10
Yogendra Singh

La seule alternative est de boucler la liste des noms, de calculer la longueur maximale de la chaîne et d'ajouter des espaces blancs au besoin après chaque nom pour garantir que tous les nombres commencent dans la même colonne.

L'utilisation d'onglets présente le désavantage que vous ne pouvez pas connaître a priori combien d'espaces sont équivalents à un onglet, car il dépend de l'éditeur.

0
SJuan76