Qu'est-ce qu'Java “%n” printf?
Je suis en train de lire Efficace Java et utilise %n
pour le caractère de saut de ligne partout. J'ai utilisé \n
plutôt réussi pour le saut de ligne dans les programmes Java.
Qui est le "correct" de l'un? Quel est le problème avec \n
? Pourquoi Java modifier cette convention C?
- Juste une supposition, mais: support multi-plateforme. Différents systèmes d'utilisation des différents personnages pour les retours à la ligne, par exemple \n vs \r\n. C# a l'Environnement.De retour à la ligne pour le même but.
- Java a quelque chose dans le Système, mais %n est plus facile dans un printf.
- pourquoi java modifier cette convention c == +1, 🙂
- Pas une modification, un ajout/mise en valeur. \n signifie encore \n
- (note pour les futurs lecteurs: C déjà auto convertir
\n
spécifiques à chaque plateforme saut de ligne dans le format de texte, reportez-vous à ceci, Java ne marche pas) - Quelqu'un pourrait-il indiquer à quelle versions de Java de soutien de cela?
Vous devez vous connecter pour publier un commentaire.
À partir d'un rapide google:
Veuillez vous référer
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Original source
%n
est portable sur les plates-formes\n
ne l'est pas.Voir le chaîne de mise en forme de la syntaxe dans la documentation de référence:
Tout
\n
est le bon caractère de saut de ligne pour les systèmes basés sur Unix, d'autres systèmes peuvent utiliser des caractères différents pour représenter la fin d'une ligne. En particulier, l'utilisation du système de Windows\r\n
, et au début de MacOS systèmes utilisés\r
.En utilisant
%n
dans votre chaîne de format, vous dites Java pour utiliser la valeur retournée parSystem.getProperty("line.separator")
, qui est le séparateur de ligne pour le système actuel.Avertissement: si vous êtes en train de faire du RÉSEAUTAGE code, vous pourriez préférer la certitude de \n, par opposition à l' %n qui peut envoyer des différents personnages à travers le réseau, en fonction de la plate-forme, il est exécuté sur.
"correct", dépend exactement ce que vous essayez de faire.
\n vous donnera toujours une "unix" style de fin de ligne.
\r\n permettra de toujours vous donner un "dos de style" fin de ligne.
%n va vous donner les caractères de fin de ligne pour la plate-forme vous sont en cours d'exécution sur
C gère les choses différemment. Vous pouvez choisir d'ouvrir un fichier sous forme de "texte" ou "binaire" de mode. Si vous ouvrez le fichier en mode binaire \n vous donnera un "unix style" fin de ligne et "\r\n" vous donnera un "dos de style" fin de ligne. Si vous ouvrez le fichier en mode "texte" sur un système dos/windows, puis quand vous écrivez \n le fichier de code de traitement convertit \r\n. Donc, par l'ouverture d'un fichier en mode texte et en utilisant \n vous obtenez la plate-forme spécifique de fin de ligne.
Je peux voir pourquoi les concepteurs de java ne voulais pas reproduire C hacky idées à propos de "texte" et "binaire" fichier de modes.
En java,
\n
toujours générer\u000A
caractère de saut de ligne. Pour obtenir de bons séparateur de ligne pour la plate-forme en particulier l'utilisation%n
.Donc utiliser
\n
lorsque vous êtes sûr que vous avez besoin\u000A
caractère de saut de ligne, par exemple dans la mise en réseau.Dans toutes les autres situations, l'utilisation
%n
Avis de ces réponses ne sont que des vrai lors de l'utilisation de
System.out.printf()
ouSystem.out.format()
ou laFormatter
objet. Si vous utilisez%n
dansSystem.out.println()
, il sera tout simplement de produire un%n
, pas un saut de ligne.%n spécificateur de format est un séparateur de ligne qui est portable sur différents systèmes d'exploitation. Toutefois, il ne peut pas être utilisé comme un argument pour le Système.out.imprimer ou d'un Système.out.println fonctions.
Il est toujours recommandé d'utiliser cette nouvelle version de séparateur de ligne ci-dessus \n.