Hoe zit het met Java’s “%n” in printf?

Ik lees Effectieve Java en het gebruikt overal %nvoor het teken van de nieuwe regel. Ik heb \nredelijk succesvol gebruikt voor newline in Java-programma’s.

Wat is de ‘juiste’? Wat is er mis met \n? Waarom heeft Java deze C-conventie gewijzigd?


Antwoord 1, autoriteit 100%

Van een snelle google:

Er is ook één specificatie die niet overeenkomt met een argument. Het is “%n” die een regeleinde uitvoert. In sommige gevallen kan ook een “\n” worden gebruikt, maar aangezien “%n” altijd het juiste platformspecifieke scheidingsteken geeft, is het overdraagbaar tussen platforms, terwijl “\n” dat niet is.

Zie a.u.b.
https://docs.oracle.com/javase/tutorial/java/data /numberformat.html

Originele bron


Antwoord 2, autoriteit 20%

%nis overdraagbaar op verschillende platforms
\nniet.

Zie de opmaakstringsyntaxis in de referentiedocumentatie:

‘n’ regelscheidingsteken Het resultaat is de
platformspecifiek regelscheidingsteken


Antwoord 3, autoriteit 15%

Hoewel \nhet juiste teken voor een nieuwe regel is voor op Unix gebaseerde systemen, kunnen andere systemen andere tekens gebruiken om het einde van een regel aan te geven. Vooral Windows-systemen gebruiken \r\nen vroege MacOS-systemen \r.

Door %nin uw opmaakreeks te gebruiken, vertelt u Java de waarde te gebruiken die wordt geretourneerd door System.getProperty("line.separator"), de regel scheidingsteken voor het huidige systeem.


Antwoord 4, autoriteit 11%

Waarschuwing:

Als u NETWORKING-code gebruikt, geeft u misschien de voorkeur aan de zekerheid van \n, in plaats van %ndie verschillende tekens over het netwerk kan verzenden, afhankelijk van op welk platform het draait.


Antwoord 5, autoriteit 5%

‘correct’ hangt af van wat u precies probeert te doen.

\n geeft je altijd een regeleinde in “unix-stijl”.
\r\n geeft je altijd een “dos style” regeleinde.
%n geeft je het einde van de regel voor het platform waarop je draait

C gaat hier anders mee om. U kunt ervoor kiezen om een bestand in “tekst” of “binaire” modus te openen. Als u het bestand in binaire modus opent, krijgt u \n een “unix style” regeleinde en “\r\n” geeft u een “dos style” regeleinde. Als u het bestand in “tekst”-modus opent op een dos/windows-systeem, dan wordt het door de bestandsverwerkingscode geconverteerd naar \r\n wanneer u \n schrijft. Dus door een bestand in tekstmodus te openen en \n te gebruiken, krijg je het platformspecifieke regeleinde.

Ik begrijp waarom de ontwerpers van Java de hacky-ideeën van C met betrekking tot “tekst” en “binaire” bestandsmodi niet wilden repliceren.


Antwoord 6, autoriteit 3%

Merk op dat deze antwoorden alleen waar zijn bij gebruik van System.out.printf()of System.out.format()of de Formatterobject. Als u %ngebruikt in System.out.println(), zal het gewoon een %nproduceren, geen nieuwe regel.


Antwoord 7, autoriteit 2%

In Java genereert \naltijd \u000Alinefeed-teken. Gebruik %nom het juiste regelscheidingsteken voor een bepaald platform te krijgen.

Gebruik dus \nals je zeker weet dat je \u000Alinefeed-tekens nodig hebt, bijvoorbeeld in netwerken.
Gebruik in alle andere situaties %n


Antwoord 8

%n-indelingsspecificatie is een regelscheidingsteken dat overdraagbaar is tussen besturingssystemen. Het kan echter niet worden gebruikt als argument voor de functies System.out.print of System.out.println.

Het wordt altijd aanbevolen om deze nieuwe versie van het regelscheidingsteken hierboven te gebruiken \n.

Other episodes