为什么 \n 和 (String)System.getProperty("line.separator");采取不同的行动?
Why does \n and (String)System.getProperty("line.separator"); act differently?
我的程序接受一个文本文件的输入,每个单词由换行符分隔,我的程序接受它并处理数据,然后我需要输出到一个新文件,同时保持控制台输出。
现在我想知道为什么当我将“\n”附加到我的 stringBuilder 时它会打印出来,就像在控制台中有一个新行一样,但在文件输出中,它并不认为它是一个新行并将所有单词放在一行中。
当我使用 newLine 时,它只会在我的控制台输出和输出文件中提供一个新行。这是为什么? (String)System.getProperty("line.separator") 是什么导致了这个?
String newLine = (String)System.getProperty("line.separator");
try{
BufferedReader fileIn = new BufferedReader(new FileReader(fileName));
stringBuilder.append(newLine);
while((s = fileIn.readLine()) != null){
stringBuilder.append(s);
stringBuilder.append(newLine);//using newLine,
}
String a = stringBuilder.toString();
if(s== null){
fileIn.close();
}
因为在某些系统 (Linux/Unix) 上新行被定义为 \n
而在其他系统 (Windows) 上它是 \r\n
。根据阅读文本的软件,它可能会选择坚持这一点,或者更多地 "forgiving" 识别甚至 \r
单独识别。
相关维基百科文本(https://en.wikipedia.org/wiki/Newline):
Systems based on ASCII or a compatible character set use either LF
(Line feed, '\n', 0x0A, 10 in decimal) or CR (Carriage return, '\r',
0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF,
'\r\n', 0x0D0A)
这也是为什么您可以像以前那样从 System
class 中检索系统定义的行分隔符,而不是例如在 [=14] 中使用某个常量=] class.
System.getProperty("line.separator")
与 "\n"
的不同之处在于前者 returns 是 OS 行分隔符(并不总是 \n
)。 \n
只是一个换行符,当您在不将 \n
解释为新行的程序(例如 Windows 上的记事本)中打开输出文件时,您将看不到那条新线。
我的程序接受一个文本文件的输入,每个单词由换行符分隔,我的程序接受它并处理数据,然后我需要输出到一个新文件,同时保持控制台输出。
现在我想知道为什么当我将“\n”附加到我的 stringBuilder 时它会打印出来,就像在控制台中有一个新行一样,但在文件输出中,它并不认为它是一个新行并将所有单词放在一行中。
当我使用 newLine 时,它只会在我的控制台输出和输出文件中提供一个新行。这是为什么? (String)System.getProperty("line.separator") 是什么导致了这个?
String newLine = (String)System.getProperty("line.separator");
try{
BufferedReader fileIn = new BufferedReader(new FileReader(fileName));
stringBuilder.append(newLine);
while((s = fileIn.readLine()) != null){
stringBuilder.append(s);
stringBuilder.append(newLine);//using newLine,
}
String a = stringBuilder.toString();
if(s== null){
fileIn.close();
}
因为在某些系统 (Linux/Unix) 上新行被定义为 \n
而在其他系统 (Windows) 上它是 \r\n
。根据阅读文本的软件,它可能会选择坚持这一点,或者更多地 "forgiving" 识别甚至 \r
单独识别。
相关维基百科文本(https://en.wikipedia.org/wiki/Newline):
Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, '\r\n', 0x0D0A)
这也是为什么您可以像以前那样从 System
class 中检索系统定义的行分隔符,而不是例如在 [=14] 中使用某个常量=] class.
System.getProperty("line.separator")
与 "\n"
的不同之处在于前者 returns 是 OS 行分隔符(并不总是 \n
)。 \n
只是一个换行符,当您在不将 \n
解释为新行的程序(例如 Windows 上的记事本)中打开输出文件时,您将看不到那条新线。