回车和换行... C#中是否都需要?

问题描述 投票:29回答:4

将新行字符插入字符串时,我通常会这样做:

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'之间有任何区别。

c# carriage-return linefeed
4个回答
66
投票

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?


10
投票

回车\r将光标移动到当前行的开头。换行符\n导致下一行,可能是下一行的开头;这是Alexei在上面注意到的平台相关部分(在* nix系统上\n给你一个回车和一个换行符,在windows中它没有)

你使用什么取决于你想要做什么。如果我想在控制台上制作一个小东西,我会以str = "|\r/\r-\r\\\r";为例。


1
投票

这取决于您显示文本的位置。例如,在控制台或文本框上,\ n就足够了。在RichTextBox上我认为你需要两者。


1
投票

我知道这有点旧,但对于任何在这个页面上磕磕绊绊的人都应该知道\ n和\ r \ n之间存在差异。

\ r \ n给出CRLF行尾,\ n给出LF行尾字符。一般来说,眼睛的差别很小。

从字符串创建一个.txt然后尝试在记事本中打开(正常而不是记事本++)你会发现差异

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',下面是'IF only'看起来像(有一个字符在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 data - England。文件已从CRLF Line end更改为LF line end)。这使SSIS作业停止运行并因无法读取LF行结尾而失败。

线路结束信息来源:https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications

希望这有助于未来的人:) CRLF =基于Windows,LF或CF来自基于Unix的系统(Linux,MacOS等)

© www.soinside.com 2019 - 2024. All rights reserved.