Wat zijn de verschillen tussen Char Literals ‘\ N’ en ‘\ R’ in Java?

In Java zijn de retourfarakters van de nieuwlijn en het vervoers beide lijken hetzelfde effect te tonen.

Wat zijn de werkelijke verschillen tussen Char Literals \nEN \rIN JAVA?


Merk op dat het bovenstaande vraagt ​​naar de \n-karakter , niet de newLine()functie op BufferedWriter, en dus Deze andere vraag is niet relevant.


Antwoord 1, Autoriteit 100%

\nis een lijninvoer (LF) -karakter, karaktercode 10. \ris een koetsretour (CR) -karakter, karaktercode 13. Wat zij doen verschilt van systeem tot systeem. Op Windows worden bijvoorbeeld lijnen in tekstbestanden beëindigd met CR onmiddellijk gevolgd door LF (bijvoorbeeld CRLF). Op UNIX-systemen en hun derivaten wordt alleen LF gebruikt. (Macs voorafgaand aan Mac OS X gebruikte CR, maar Mac OS X is een * NIX-derivaat en maakt het gebruik van LF.)

In de oude dagen heeft LF letterlijk slechts een lijntoevoer op printers (uitgeschoven zonder te bewegen waar u horizonaal op de pagina bent) en CR op dezelfde manier teruggestuurd naar het begin van de lijn zonder Het papier verplaatsen, vandaar sommige systemen (zoals Windows) CR (terugkeer naar de linkerkant) en LF (en het papier invoeren).

Vanwege al deze verwarring accepteren enkele output-doelen meerdere lijnonderbrekingssequenties, zodat u hetzelfde effect kunt zien van beide tekens, afhankelijk van wat u uitvoert.


Antwoord 2, Autoriteit 65%

\nis voor unix
\ris voor Mac (vóór OS X)
\r\nis voor Windows-indeling

U kunt ook System.getProperty("line.separator")

nemen

het geeft je het juiste voor je besturingssysteem


Antwoord 3, autoriteit 15%

Het hangt af van welk Platform je werkt. Gebruik –

. om het juiste resultaat te krijgen

System.getProperty("line.separator")

Antwoord 4, autoriteit 6%

Het verschil is niet Java-specifiek, maar platformspecifiek.
Historisch gezien hebben UNIX-achtige besturingssystemen \nals nieuwe regel gebruikt, sommige andere verouderde besturingssystemen hebben \rgebruikt en Windows-besturingssystemen hebben \r\n.


Antwoord 5, autoriteit 4%

Het hangt er eigenlijk van af wat er wordt gebruikt om het resultaat af te drukken. Meestal is het resultaat hetzelfde, zoals je zegt –

Historisch gezien zou een regelterugloop moeten doen wat de home-knop doet: het caret terugbrengen naar het begin van de regel.

\nzou je een nieuwe regel moeten geven, maar het caret niet verplaatsen.

Als je aan oude printers denkt, denk je ongeveer hetzelfde als de oorspronkelijke auteurs van de karaktersets. Het is een andere handeling om de papierinvoer te verplaatsen en de caret te verplaatsen. Deze twee karakters drukken dat verschil uit.


Antwoord 6, autoriteit 2%

Als je een string in console (Eclipse) afdrukt, hebben\n,\r en \r\n hetzelfde effect, ze geven je allemaal een nieuwe regel;maar \n\r(ook \n\n ,\r\r) geeft je twee nieuwe regels; als je een string naar een bestand schrijft, kan alleen \r\n je een nieuwe regel geven.


Antwoord 7

De bovenstaande antwoorden zijn perfect. De tekens LF(\n), CR(\r) en CRLF(\r\n) zijn platformafhankelijk. De interpretatie voor deze karakters wordt echter niet alleen bepaald door de platforms, maar ook door de console die u gebruikt. In Intellij console (Windows), dit \rteken in deze instructie System.out.print("Happ\ry");produceert de output y. Maar als u de terminal (Windows) gebruikt, krijgt u yappals uitvoer.


Antwoord 8

Op de opdrachtregel verplaatst \r de cursor terug naar het begin van de huidige regel. Om het verschil te zien, moet u uw code uitvoeren vanaf een opdrachtprompt. De console van Eclipse toont vergelijkbare uitvoer voor beide expressies.
Voor een volledige lijst met escape-reeksen, klik hier https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.6

Other episodes