2014-02-08 52 views
4

我一直認爲line.separator\n做的事情是一樣的,它是。但我注意到,這兩個值實際上是不一樣的(也許甚至還沒有接近?)當我測試此代碼:「line.separator」的實際值是多少?

String str1 = System.getProperty("line.separator"); 
String str2 = "\n"; 

System.out.println(str1.equals(str2)); // output:false (as expected) 

然後我檢查兩者的長度:

System.out.println(str1.length());  //output: 2 
System.out.println(str2.length());  //output: 1 

知道爲什麼str1.length()2,我嘗試這樣做:

System.out.println("**"+str1.charAt(0)+"**"); 

輸出:

** 

System.out.println("##"+str1.charAt(1)+"##"); 

輸出:

## 
## 

所以我注意到,在line.separator實際換行符是第二個字符。那麼第一個索引中的值是多少,因爲它應該打印****(atleast),而其打印**取而代之?

+5

它在不同的操作系統上有所不同。 Windows是'\ r \ n'。 –

回答

5

取決於您的操作系統。

for Windows中,line.separator實際值\r\n

從您的代碼System.out.println(str1.length()); //output: 2,我相信你是在Windows的操作系統(其他操作系統會給輸出:1

這解釋了爲什麼有這個輸出:

System.out.println("**"+str1.charAt(0)+"**"); 

輸出:

** 

\r是一個回車符,打印之後**指針返回到初始點,並打印第二個**,它重寫第一個**。最後,你只拿到了**作爲輸出

而對於第二個:

System.out.println("##"+str1.charAt(1)+"##"); 

輸出:

## 
## 

你有這樣的輸出,因爲str1.charAt(1)實際上是\n

+0

這取決於您的操作系統。 '\ r \ n'是Windows特定的。 –

+0

@HunterMcMillen from the question,'str1.length())= 2'。那麼我很確定它是Windows操作系統:D – Baby

4

它取決於該平臺/操作系統,在Linux中它是\n,在Windows中,它是\r\n

Windows: '\r\n' 
Mac (OS 9-): '\r' 
Mac (OS 10+): '\n' 
Unix/Linux: '\n' 
+0

非常感謝! – DnR

3

在Windows上,它是「\ r \ n」,在* NIX上,它是「\ n」,在OSX之前的Mac上是「\ r」。您從System對象中檢索它,因爲它取決於操作系統。

0

換行 - LF - \ N - 0X0A - 10(十進制)

回車 - CR - \ r - 0X0D - 13(十進制)

現在,我們已經理解的是,我們有兩個不同選項來獲得新的線,出現的問題是 - 爲什麼這樣?

原因很簡單。不同的操作系統有不同的理解新生產線的方式。 Mac只理解'\ r'作爲新行,而Unix和Linux理解'\ n'作爲新行字符。我們最喜歡的OS窗口需要兩個字符一起解釋爲新行,即'\ r \ n'。這就是爲什麼在一個操作系統中創建的文件在另一個操作系統中無法正常打開並使其變得混亂的原因。

相關問題