天天看點

java常識-java怎麼換行“\r"和”\n"的差別系統影響java使用換行符的幾種方式

文章目錄

  • "\r"和"\n"的差別
    • "\r"和"\n"的由來
    • Enter鍵和輸入的"\n"有不同嗎?
  • 系統影響
  • java使用換行符的幾種方式

“\r"和”\n"的差別

回車 \r 本義是光标重新回到本行開頭,r的英文return,控制字元可以寫成CR,即Carriage Return

換行 \n 本義是光标往下一行(不一定到下一行行首),并不移動左右。n的英文newline,控制字元可以寫成LF,即Line Feed

也就是說,如果想要到下一行行首,一般的寫法應該是"\r\n",0D 0A,即 ASCII 碼對應的 ‘\r’和’\n’

注意:\r,\n的順序是不能夠對換的,否則不能實作換行的效果.

這個順序是固定的,但實際生活中不是這樣,有時輸入"\n"就能達到我們想要的效果,這是為什麼呢?

“\r"和”\n"的由來

原先的機械打字機,打完一行後會有一個自動卷動紙帶的動作,進行換行,大約0.2s,受限于機械,當時可以在這段時間内輸入兩個字元,而在這期間輸入的字就會丢失.

後來人們對其進行了改進,加入了"字車",每次打完一行都要重新撥動上面的"字車",代表,要對下一行首位進行書寫,此時打字機自動回到行首,并且滾動下面的卷紙滾輪換到下一行,模拟兩個字元輸出進行占位

後來研發計算機鍵盤的時候,延續了這個習慣,每次換行也要"\r\n"

但是前期電腦的存儲器很珍貴,有人覺得這兩個字元太浪費記憶體空間,就閹割掉了一個,隻剩"\n",但是還是有系統保留了"\r\n"換行的習慣,是以不同系統間對于換行的定義也不同,比如windows還保留着"\r\n"的定義,而linux是"\n",是以兩個打開對方的檔案就會顯示出現差異

java常識-java怎麼換行“\r"和”\n"的差別系統影響java使用換行符的幾種方式

Enter鍵和輸入的"\n"有不同嗎?

Enter鍵在windows代表"\r\n",即代表了兩個字元,比"\n"多"\r";在linux則代表"\n",

出現這種差異在于不同系統對于換行的定義不同

硬回車就是普通鍵盤按回車産生的,它在換行的同時也起着段落分隔的作用。

軟回車是用 Shift + Enter 産生的,它換行,但是并不換段,即前後兩段文字在 Word 中屬于同一“段”。在應用格式時有用

軟回車能使前後兩行的行間距大幅度縮小,因為它不是段落标記,要和法定的段落标記——硬回車差別出來。硬回車的html代碼是

,段落的内容就夾在裡面,而軟回車的代碼很精悍:

。網頁的文字如果複制到word中,則硬回車變為彎曲的箭頭,軟回車變為向下的箭頭。

系統影響

換行符會随着系統的不同而不同

windows下的文本檔案換行符:\r\n

java常識-java怎麼換行“\r"和”\n"的差別系統影響java使用換行符的幾種方式

linux/unix下的文本檔案換行符:\r

Mac下的文本檔案換行符:\n

是以常見的現象是,Unix/Mac系統下的檔案在Windows裡打開的話,所有文字會變成一行;而Windows裡的檔案在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符号

如圖,0a在ascII碼中是"\n"的意思,是以如果檔案在linux中打開

java常識-java怎麼換行“\r"和”\n"的差別系統影響java使用換行符的幾種方式

是以,java如果在win應用,java應該使用的換行符是"\r\n"

java使用換行符的幾種方式

有以下3種方法:

1.使用java中的轉義符"\r\n":

2.BufferedWriter的newline()方法:

BufferedWriter bw=new BufferedWriter(fos);  

bw.write("你好");  

bw.newline();  
           

3.使用System.getProperty()方法: ·