5

我想知道为什么在 C# 中确定字符串的长度时 \n 不计为 2 个字符

EX: 这是一条测试评论\n示例文本 test 123456\nadssssssssss\n\nasdasdasda\nasdadadadad\nasadad\nasada\n\n\n最后一段\n12345\nTest

上面的字符串包含 136 个字符,但是 String 对象的 Length 属性我将字符串存储在 counts\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);

我不能使用子字符串,因为我的长度偏移量 136 超出了字符串的 c# 表示形式的边界。

4

3 回答 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)。字符串文字中的反斜杠表示它是Escape Sequence

因此,即使计算 136 个字符,\n它在编译时也会被单个换行符替换。


请注意,根据使用此字符串的位置,您可能需要考虑使用Environment.NewLine而不是\n. Windows上真正的换行符是"\r\n", 或CR LF. 虽然许多控件等会处理\n罚款,但文件和其他事情可能会发生\r\n

string test = "Welcome to" + Environment.NewLine + "StackOverflow!";
于 2012-11-21T00:02:03.700 回答
1

你不计算'\'它在那里告诉系统右边的字符是“特殊”的东西。在您的情况下,它恰好是换行符\n。它也可能是一个 tab \t,回车\r......所以数学是正确的。

于 2012-11-21T00:27:10.810 回答
1

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

于 2012-11-21T00:01:38.800 回答