将新行字符插入字符串时,我通常会这样做:
str = "First line\nSecond line";
在C#中,这是标准做法吗?我还应该包含'回车'字符'\ r'吗?以下是否有任何区别,如果有,它们是什么?
str = "First line\nSecond line";
str = "First line\r\nSecond line";
如果同时使用'回车'和'换行'是标准做法,是否有特定订单?为什么?
注意:我在SO上阅读了一些其他帖子,但没有找到特定于.NET / C#的答案。
编辑:在测试了一个小应用后,我没有看到'\ n'和'\ n \ r'或'\ r \ n'之间有任何区别。
答案 0 :(得分:65)
System.Environment.NewLine
是您正在寻找的常量 - http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx,它将提供特定于环境的组合,以便给定操作系统上的大多数程序将考虑“下一行文本”。
在实践中,大多数文本工具会将包含\n
的所有变体视为“新行”,您可以在文本"foo\nbar"
中使用它。特别是如果您尝试构建多行格式字符串,如$"V1 = {value1}\nV2 = {value2}\n"
。如果要使用字符串连接构建文本,请考虑使用NewLine
。在任何情况下,确保工具你正在按照你想要的方式使用理解输出,你可能需要例如总是使用\r\n
而不管平台如果您选择的编辑器无法正确打开文件否则
请注意,WriteLine
方法使用NewLine
,因此,如果您计划使用这些方法撰写文字,请避免仅使用\n
,因为生成的文字可能包含\r\n
的混合\n
可能会混淆某些工具,但看起来并不整齐。
有关历史背景,请参阅Difference between \n and \r?
答案 1 :(得分:10)
回车\r
将光标移动到当前行的开头。换行符\n
导致下一行的下降,可能下一行的开头;这是Alexei上面提到的平台相关部分(在* nix系统\n
上给你一个回车和一个换行符,在windows中它没有)
您使用的内容取决于您要做的事情。如果我想在控制台上制作一个小东西,我会做str = "|\r/\r-\r\\\r";
。
答案 2 :(得分:1)
这取决于您显示文本的位置。例如,在控制台或文本框上,\ n就足够了。在RichTextBox上,我认为你需要两者。
答案 3 :(得分:0)
我知道这有点旧了,但是对于绊倒这个页面的任何人都应该知道\ n和\ r \ n之间存在区别。
\ r \ n给出CRLF行尾,\ n给出LF行尾字符。一般来说,眼睛几乎没有什么区别。
从字符串中创建一个.txt,然后尝试在记事本中打开(正常情况下不是notepad ++),您会注意到其中的区别
SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIOD
Q44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901
Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901
上面使用的是“ CRLF”,下面是“仅LF”的外观(在LF所显示的位置看不到一个字符)。
SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIODQ44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901
如果需要校正行尾并且文件大小足够小,则可以在NotePad ++中更改行尾(或粘贴到单词中,然后再回到记事本中-尽管这只会使CRLF生效)。
这可能会使读取这些文件的某些功能潜在地不再起作用(给出的示例行来自GP Prescribing数据-England。文件已从CRLF行端更改为LF行端)。这使SSIS作业停止运行,并由于无法读取LF行的结尾而失败。
行尾信息的来源: https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications
希望这对以后的工作有所帮助:) CRLF =基于Windows的LF或CF来自基于Unix的系统(Linux,MacOS等)
答案 4 :(得分:0)
这总是一个好主意,虽然并不总是必需的,但 Windows 标准是将两者都包括在内。
\n 实际上代表一个 换行,或数字 10,而规范的换行意味着在终端和电传打字机上“向下移动一行”。
\r 表示 CR、回车符或数字 13。在 Windows、Unix 和大多数终端上,CR 将光标移动到行的开头。 (对于 8 位计算机,情况并非如此:大多数计算机确实会使用 CR 前进到下一行。)
无论如何,某些进程(例如文本控制台)可能会在您发送 LF 时自动添加 CR。但是,由于 CR 只是移动到行首,因此发送 CR 两次也无妨。
另一方面,对话框、文本框和其他显示元素需要 CR 和 LF 才能正确开始新行。
因为两者都发送确实没有缺点,而且在某些情况下两者都是必需的,所以最简单的策略是如果您不确定,就同时使用两者。