换行符不算作字符串长度的2个字符

时间:2012-11-20 23:58:00

标签: c#

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

EX: 这是一个测试评论\ nSample text test 123456 \ nadssssssssss \ n \ nasdasdasda \ nasdadadadad \ nasadad \ nasada \ n \ n \ nLast paragraph \ n12345 \ nTest

上面的字符串包含136个字符,但是String对象的Length属性我将字符串存储在count \ n中作为1个chartacter,并将字符串报告为124个字符长。

我想根据预先计算的start和lenght标记提取子字符串。创建标记计数为两个字符。 我怎样才能在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#表示的边界。

3 个答案:

答案 0 :(得分: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上的 true 换行符为"\r\n"CR LF。虽然许多控件等都可以处理\n罚款,但文件和其他内容可能需要\r\n

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你不计算'\'它告诉系统右边的字符是'Special'。在你的情况下,恰好是换行符\n。它也可以是标签\t,回车\r ...... 所以数学是正确的。