\r : return 到當前行的最左邊。
\n: newline 向下移動一行,並不移動左右。
歷史:
回車”(Carriage Return)和“換行”(Line Feed)這兩個概念的來歷和區別。
在計算機還沒有出現之 前,有一種叫做電傳打字機(Teletype Model 33,Linux/Unix下的tty概念也來自於此)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正 好可以打兩個字符。要是在這0.2秒裏面,又有新的字符傳過來,那麼這個字符將丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字符。一個叫做“回車(return)”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行(newline)”,告訴打字機把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
後來,計算機發明瞭,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認爲在每行結尾加兩個字符太浪費了,加一個就可以。於是,就出現了分歧。
Linux中\n表示回車+換行;
Windows中\r\n表示回車+換行。(文件以\r\n結尾)
Mac中\r表示回車+換行。
Unix系統裏,每行結尾只有“<換行>”,即“\n”;Windows系統裏面,每行結尾是“<換行><回車>”,即“\n\r”;Mac系統裏,每行結尾是“<回車>”。一個直接後果是,Unix/Mac系統下的文件在Windows裏打開的話,所有文字會變成一行;而Windows裏的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
1)
import java.util.Vector;
public class Read {
public static void main (String[] args) {
Vector<Character> v=new Vector<Character>();
v.add('a');
v.add('s');
v.add('d');
v.add('w');
System.out.print(v);
}
}
執行DOS命令:
輸出結果:[a, s, d, w]
2)以\r結尾
import java.util.Vector;
public class Read {
public static void main (String[] args) {
Vector<Character> v=new Vector<Character>();
v.add('a');
v.add('s');
v.add('d');
v.add('w');
v.add('\r');
System.out.print(v);
}
}
執行DOS命令:
輸出結果:]a, s, d, w, (最後含一個空格)
原因:vector的元素應該爲[a, s, d, w, \r],首先程序輸出[a, s, d, w, (最後含一空格)。當輸出\r時打印頭定位到當前行最左邊,然後輸出‘]’,‘]’把最開始的字符‘[’覆蓋掉。(真艹蛋)
3) 輸出‘\r’'\n'
import java.util.Vector;
public class Read {
public static void main (String[] args) {
Vector<Character> v=new Vector<Character>();
v.add('a');
v.add('s');
v.add('d');
v.add('w');
v.add('\r');
v.add('\n');
System.out.print(v);
}
}
執行DOS命令輸出結果:
, , s, d, w, (末尾含一空格)
]
原因:程序應該輸出輸出[a, s, d, w, \r, \n],程序執行時首先輸出[a, s, d, w, (末尾含一空格)。然後輸出\r時,打印頭定位到本行的最左邊,然後把字符‘[’覆蓋輸出字符逗號‘,’,接着覆蓋先前輸出字符‘a’替換成字符空格‘ ’,然後輸出\n時,打印頭定位到下一行,輸出‘]’。
4)以“\r\n”結尾
import java.util.Vector;
public class Read {
public static void main (String[] args) {
Vector<Object> v=new Vector<Object>();
v.add('a');
v.add('s');
v.add('d');
v.add('w');
v.addElement("\r\n");
System.out.print(v);
}
}
執行DOS命令:
Vector的數據爲[a, s, d, w, \r\n]。程序首先輸出[a, s, d, w, (末尾一空格)。然後輸出\r,打印頭定位到本行最左邊,然後輸出\n換行,接着輸出']'
PS:以上程序在IDE下運行,輸出結果除了1)其他都不同。可能IDE下\r也看做是換行