web-dev-qa-db-fra.com

Comprendre les chaînes $ au format Java

 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

Dans ce cas, pourquoi un 2 est-il ajouté à $?

75
andandandand

Le 2 n'a rien à voir avec le $:

  • % = Début de la chaîne de format
  • 4$ = Quatrième argument ('d')
  • 2 = Largeur de deux (aligné à droite)
  • s = type de chaîne
120
Sven Lilienthal

Le 2$ signifie mettre le deuxième argument de la liste ici. Le $ suit un nombre ne le précède pas. De même, 4$ signifie mettre le quatrième argument ici.

Pour clarifier, nous pouvons décomposer le %2$2s format dans ses parties:

  • % - indique qu'il s'agit d'une chaîne de format

  • 2$ - indique que le deuxième argument de valeur doit être mis ici

  • 2 - le format comporte deux caractères

  • s - formate la valeur sous forme de chaîne

Vous pouvez trouver plus d'informations dans la documentation .

47
Dave Webb

%: chaîne de format

4$: quatrième argument de valeur

2: largeur (longueur lorsque l'argument est imprimé)

s: c'est une conversion d'argument chaîne

par exemple, l'extrait de code suivant:

StringBuffer sb=new StringBuffer();

Formatter formatter=new Formatter(sb,Locale.UK);

formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");

System.out.println(sb);

produit une sortie de:

-    d-    c-    b-    a-

(largeur de 5 caractères par argument, complétée par des espaces)

et en remplaçant 5 avec 2, produira la sortie suivante:

- d- c- b- a-

Regarde la différence? :)

3
Rahul Mishra

Ce sont des arguments positionnels où %4$2s signale pour formater le quatrième argument sous la forme d'une chaîne de largeur 2. Cela est particulièrement utile lorsque vous fournissez des chaînes de localisation où les arguments doivent être réorganisés sans toucher le code source.

Les spécificateurs de format pour les types utilisés pour représenter les dates et les heures ont la syntaxe suivante:

%[argument_index$][flags][width]conversion

L'option argument_index est un entier décimal indiquant la position de l'argument dans la liste des arguments. Le premier argument est référencé par "1$", le second par "2$", etc. — Documentation du formateur

3
Joey