2014-02-08 50 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'。这就是为什么在一个操作系统中创建的文件在另一个操作系统中无法正常打开并使其变得混乱的原因。

相关问题