Je regarde une ligne de code semblable à:
sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Je pense que les chaînes symboliques font référence au nombre de caractères numériques affichés par heure, minute, etc. - ou quelque chose comme ça, je ne suis pas tout à fait certain.
Normalement, je peux comprendre ce genre de chose, mais je suis incapable de trouver une référence utile en cherchant "% 02d% 01d" sur Google. Quelqu'un peut-il m'éclairer?
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
les mêmes règles devraient s'appliquer à Java.
dans votre cas, cela signifie la sortie de valeurs entières de 2 chiffres ou plus, le premier étant zéro si le nombre est inférieur ou égal à 9
Au lieu de googler pour %02d
, vous auriez dû chercher la fonction sprintf()
.
%02d
signifie "formater le nombre entier avec 2 chiffres, en le remplissant à gauche avec des zéros", ainsi:
Format Données Résultat % 02d 1 01 % 02d 11 11
Ils mettent en forme String
. La syntaxe spécifique à Java est donnée dans Java.util.Formatter
.
La syntaxe générale est la suivante:
%[argument_index$][flags][width][.precision]conversion
%02d
effectue une conversion entière décimale d
, formatée avec un remplissage nul (drapeau 0
), avec une largeur 2
. Ainsi, un argument int
dont la valeur est say 7
sera formaté en "07"
en tant que String
.
Vous pouvez également voir cette chaîne de formatage dans, par exemple, String.format
.
Ce ne sont que quelques formats couramment utilisés et ne couvrent pas la syntaxe de manière exhaustive.
System.out.printf("Agent %03d to the rescue!", 7);
// Agent 007 to the rescue!
Vous pouvez utiliser le drapeau -
pour une justification à gauche; sinon ce sera une bonne justification.
for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
}
Cela affiche quelque chose comme:
Java.version : 1.6.0_07
Java.vm.name : Java HotSpot(TM) Client VM
Java.vm.vendor : Sun Microsystems Inc.
Java.vm.specification.name : Java Virtual Machine Specification
Java.runtime.name : Java(TM) SE Runtime Environment
Java.vendor.url : http://Java.Sun.com/
Pour un formatage de message plus puissant, vous pouvez utiliser Java.text.MessageFormat
. %n
est la conversion de nouvelle ligne (voir ci-dessous).
System.out.println(Integer.toHexString(255));
// ff
System.out.printf("%d is %<08X", 255);
// 255 is 000000FF
Notez que cela utilise également l'indexation relative <
(voir ci-dessous).
System.out.printf("%+,010.2f%n", 1234.567);
System.out.printf("%+,010.2f%n", -66.6666);
// +01,234.57
// -000066.67
Pour un formatage plus puissant, utilisez DecimalFormat
à la place.
%n
pour le séparateur de ligne spécifique à la plate-formeSystem.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World
%%
pour un signe %
- réelSystem.out.printf("It's %s%% guaranteed!", 99.99);
// It's 99.99% guaranteed!
Notez que le double
littéral 99.99
est automatiquement associé à Double
, sur lequel une conversion de chaîne utilisant toString()
est définie.
n$
pour l'indexation d'arguments explicitesSystem.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
"Du", "hast", "mich"
);
// Du! Du hast! Du hast mich!
<
pour l'indexation relativeSystem.out.format("%s?! %<S?!?!?", "Who's your daddy");
// Who's your daddy?! WHO'S YOUR DADDY?!?!?
MessageFormat
avec exempleLa réponse d'Alexandre fait référence à des documents complets ...
Votre exemple simple tiré de la question imprime simplement ces valeurs avec 2 chiffres - en ajoutant le 0 devant le cas échéant.
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
L'article traite de la class des fonctions printf, en plusieurs langues, des années 50 à nos jours.
% est un caractère spécial que vous mettez dans des chaînes de format, par exemple, dans les langages C printf et scanf (et famille), qui indique en gros "ceci est un espace réservé pour autre chose, qui ne doit pas être imprimé/lu à la lettre. "
Par exemple, un
(%02d)
dans une chaîne de format pour printf est un espace réservé pour une variable entière qui sera imprimée en décimal(%02d)
et complétée à au moins deux chiffres, avec des zéros si nécessaire.Le nombre entier réel est fourni par vous dans un argument de la fonction, par ex.
printf("%02d",5);
afficherait05
à l'écran,(%01d)
fonctionnera également de la même manière
Même chose pour Java et d'autres langues aussi :)