2012-02-13 8 views
53

In Java, entrambi i caratteri di ritorno a capo e a capo hanno entrambi lo stesso effetto.Quali sono le differenze tra i caratteri letterali ' n' e ' r' in Java?

Quali sono le differenze effettive tra i caratteri letterali \n e \r in Java?


noti che la chiede sopra circa il carattere \n, non la funzione newLine() su BufferedWriter, e così this other question non è rilevante.

+0

@ T.J.Crowder: Ti dispiace [modificare] per rendere più chiara questa distinzione? – Will

+1

@Will: Ho pensato che fosse perfettamente chiaro in primo luogo, ma a quanto pare non è stato dato il voto ravvicinato. :-) Ho aggiunto un poscritto. –

risposta

71

\n è un carattere di avanzamento riga (LF), codice carattere 10. \r è un carattere di ritorno a capo (CR), codice carattere 13. Quello che fanno differisce da sistema a sistema. Su Windows, per esempio, le linee nei file di testo sono terminate usando CR seguito immediatamente da LF (ad esempio, CRLF). Sui sistemi Unix e sui loro derivati, viene utilizzato solo LF. (I Mac precedenti a Mac OS X utilizzavano CR, ma Mac OS X è un derivato * nix e quindi utilizza LF.)

In passato, LF faceva letteralmente solo un avanzamento di riga sulle stampanti (spostandosi verso il basso di una riga senza spostarsi dove si è orizzontalmente sulla pagina), e CR è tornato all'inizio della riga senza spostando la carta verso l'alto, quindi alcuni sistemi (come Windows) inviando CR (ritorno a sinistra) e LF (e alimentare la carta in alto).

A causa di questa confusione, alcuni target di output accettano più sequenze di interruzione di riga, quindi è possibile vedere lo stesso effetto da entrambi i caratteri a seconda di cosa si sta generando.

5

La differenza non è specifica di Java, ma specifica della piattaforma. Storicamente i sistemi operativi UNIX hanno utilizzato \n come carattere di nuova riga, altri sistemi operativi deprecati hanno utilizzato \r e i sistemi operativi Windows hanno utilizzato \r\n.

1

In realtà dipende da ciò che viene utilizzato per stampare il risultato. Di solito, il risultato è lo stesso, come dici tu -

Storicamente il ritorno a capo si suppone di fare ciò che fa il pulsante home: riporta il cursore all'inizio della riga.

\n dovrebbe fornire una nuova riga ma non spostare il cursore.

Se si pensa alle vecchie stampanti, si sta praticamente pensando a come pensavano gli autori originali dei set di caratteri. È un'operazione diversa che sposta l'alimentatore della carta e sposta il cursore. Questi due personaggi esprimono questa differenza.

13

Dipende dalla piattaforma su cui lavori.Per ottenere il corretto utilizzo risultato -

System.getProperty("line.separator") 
39

\n è per UNIX
\r è per mac
\r\n è per il formato Windows

si può anche prendere System.getProperty("line.separator")

che vi darà l'appropriato al sistema operativo

+5

In Java 7 e versioni successive è possibile utilizzare 'System.lineSeparator()' – Adam6806

+0

spiegato in modo semplice. grazie. – Arundev

0

Quando si stampa una stringa in console (Eclipse), \ n, \ r e \ r \ n hanno lo stesso effetto, tutti ti daranno una nuova riga, ma \ n \ r (anche \ n \ n, \ r \ r) ti darà due nuove linee; scrivi una stringa su un file, solo \ r \ n può darti una nuova riga.