2009-12-16 3 views
57
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é à $?

Répondre

88

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

  • %       =   Début de la chaîne de format
  • 4$   =   argument de quatrième ('d')
  • 2       =   largeur de deux (droit t-aligné)
  • s       =   type de chaîne
+0

argument * impossible de créer et d'éditer car l'édition est trop petite –

35

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

Pour clarifier les choses, nous pouvons briser le format %2$2s dans ses parties:

  • % - indique ceci est une chaîne de format

  • 2$ - montre le second argument de valeur doit être mis ici

  • 2 - le format est de deux caractères

  • s - forme la valeur en tant que chaîne

Vous pouvez trouver plus d'informations in the documentation.

+0

Pourquoi downvoted? C'est une réponse correcte. – Joey

+0

Downvoting tactique? –

+0

Eh bien, maintenant vous avez une tactique upvote, alors :-) – Joey

1

Ce sont des arguments de position où %4$2s signaux pour formater le quatrième argument comme une chaîne avec une largeur 2. Ceci est particulièrement utile lors de la fourniture des chaînes pour la localisation où les arguments doivent être réorganisés sans toucher au code source.

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

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

Le argument_index en option 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.- Formatter documentation

+0

Néanmoins, j'aime mieux les chaînes de format .NET car elles rendent la position des arguments beaucoup plus claire. – Joey

1

4 $: quatrième paramètre de valeur %: Chaîne de format 2: distance (longueur de l'argument) s: est un format de chaîne

par exemple, l'extrait 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); 

une sortie:

// espacement de 5 caractères entre deux caractères

d   c   b   a 

et le remplacement de 5 à 2, produira le résultat suivant:

d c b a

Voir la différence? :)

Questions connexes