web-dev-qa-db-fra.com

Qu'est-ce qui se passe avec "% n" de Java dans printf?

Je lis Effective Java et utilise %n pour le caractère de nouvelle ligne partout. J'ai utilisé \n plutôt avec succès pour newline dans les programmes Java.

Quel est le "correct"? Quel est le problème avec \n? Pourquoi Java a-t-il changé cette convention C?

88
ripper234

À partir d'un google rapide:

Il existe également un spécificateur qui ne correspond à aucun argument. C'est "% n" qui génère un saut de ligne. Un "\ n" peut également être utilisé dans certains cas, mais étant donné que "% n" génère toujours le séparateur de ligne spécifique à la plate-forme, il est portable sur toutes les plates-formes, alors que "\ n" ne l'est pas.

Veuillez vous référer https://docs.Oracle.com/javase/tutorial/Java/data/numberformat.html

Source primaire

124
Bill K

%n est portable sur toutes les plateformes \n ne l’est pas.

Voir la syntaxe de chaîne de mise en forme dans la documentation de référence :

'n' line separator Le résultat est le séparateur de ligne spécifique à la plate-forme

25
Gregory Pakosz

Alors que \n est le caractère de nouvelle ligne correct pour les systèmes Unix, d’autres systèmes peuvent utiliser des caractères différents pour représenter la fin d’une ligne. En particulier, le système Windows utilise \r\n et les anciens systèmes MacOS utilisaient \r.

En utilisant %n dans votre chaîne de format, vous indiquez à Java d'utiliser la valeur renvoyée par System.getProperty("line.separator"), qui est le séparateur de ligne du système actuel.

23
Craig Putnam

Avertissement: si vous utilisez du code NETWORKING, vous préférerez peut-être la certitude de\n, par opposition à% n, qui peut envoyer différents caractères sur le réseau, en fonction de la plate-forme sur laquelle il est exécuté.

15
George Forman

"correct" dépend de ce que vous essayez de faire.

\ n vous donnera toujours une fin de ligne "de style unix" .\r\n vous donnera toujours une fin de ligne "de style dos" .% n vous donnera la fin de ligne de la plate-forme que vous utilisez sur

C gère cela différemment. Vous pouvez choisir d'ouvrir un fichier en mode "texte" ou "binaire". Si vous ouvrez le fichier en mode binaire,\n vous donnera une fin de ligne "de style unix" et "\ r\n" vous donnera une fin de ligne de "style dos". Si vous ouvrez le fichier en mode "texte" sur un système dos/Windows, lorsque vous écrivez\n, le code de traitement du fichier le convertit en\r\n. Donc, en ouvrant un fichier en mode texte et en utilisant\n, vous obtenez la fin de ligne spécifique à la plate-forme. 

Je peux voir pourquoi les concepteurs de Java ne voulaient pas reproduire les idées bidon de C concernant les modes de fichiers "texte" et "binaire".

7
Peter Green

En Java, \n génère toujours le caractère \u000A de saut de ligne. Pour obtenir le séparateur de ligne correct pour une plate-forme particulière, utilisez %n

Utilisez donc \n lorsque vous êtes certain d’avoir besoin du caractère de saut de ligne \u000A, par exemple pour la mise en réseau. 
Dans tous les autres cas, utilisez %n

4
Fathah Rehman P

Notez que ces réponses ne sont vraies que lorsque vous utilisez System.out.printf() ou System.out.format() ou l’objet Formatter. Si vous utilisez %n dans System.out.println(), cela produira simplement un %n, pas une nouvelle ligne.

3
user1677663

Le spécificateur de format% n est un séparateur de ligne portable dans tous les systèmes d'exploitation. Cependant, il ne peut pas être utilisé comme argument des fonctions System.out.print ou System.out.println.

Il est toujours recommandé d’utiliser cette nouvelle version du séparateur de lignes ci-dessus\n.

0
Piyush P