换行符不计入字符串长度中的2个字符。

5
我想知道为什么在C#中计算字符串长度时,\n不被视为2个字符。
例如: This is a test comment\nSample text test 123456\nadssssssssss\n\nasdasdasda\nasdadadadad\nasadad\nasada\n\n\nLast paragraph\n12345\nTest 上述字符串包含136个字符,但我存储该字符串的String对象的Length属性将\n视为1个字符,并报告该字符串长度为124个字符。
我想根据预先计算的起始和长度标记提取子字符串。这些标记是通过将\n视为两个字符创建的。 如何在C#中实现以下等效操作:
select SUBSTRING('This is a test comment\nSample text test 123456\nadssssssssss\n\nasdasdasda\nasdadadadad\nasadad\nasada\n\n\nLast paragraph\n12345\nTest',1,136);

我的字符串在C#中的表示范围之外,因此我无法使用substring方法。

在这种情况下,您可能需要考虑其他字符串处理方法。

如果你真正意思是 \n (反斜线和字母 n,而不是换行符),你需要使用保留字符串或 \\n - Esailija
字符串是从HTML文本区域创建的,因此\n字符存储在数据库中。 - TGH
3个回答

9

String.Length 包括 换行符:

string test = "1234\n6789\n\nC";

Console.WriteLine(test);
Console.WriteLine("Length: {0}", test.Length);

输出:

1234
6789

C    
Length: 12

你可能忽略了一个事实,即'\n'是一个字符。它代表换行符(LF)。在字符串字面值中的反斜杠表示这是一个转义序列
因此,即使计算了136个字符,当编译时\n将被替换为单个换行符。

请注意,根据此字符串使用的位置,您可能需要考虑使用 Environment.NewLine 代替 \n。在 Windows 上,true 换行符是 "\r\n"CR LF。尽管许多控件等可以很好地处理 \n,但文件和其他一些内容可能会期望 \r\n

string test = "Welcome to" + Environment.NewLine + "StackOverflow!";

3
也许更明显的方法是检查 "\n".Length,它的长度为1,以及 Environment.NewLine.Length,它的长度为2。 - Alexei Levenkov

1

它不会减去 \n 字符,它只将一个换行符 \n 计为一个字符,这是正确的。


1

您不需要计算 '\',它的作用是告诉系统右侧的字符是一些 '特殊' 字符。在您的情况下,它恰好是一个换行符 \n。它也可以是制表符 \t,回车符 \r 等等... 因此,这个数学计算是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接