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é à $?
Le 2
n'a rien à voir avec le $
:
%
= Début de la chaîne de format4$
= Quatrième argument ('d')2
= Largeur de deux (aligné à droite)s
= type de chaîneLe 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 .
%
: 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? :)
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