2012-11-20 63 views
4

我很奇怪,爲什麼確定在C#中的字符串的長度時\ n不計爲2個字符換行不計爲2個字符對字符串的長度

EX: 這是一個測試評論\ nSample文本測試123456 \ nadssssssssss \ n \ nasdasdasda \ nasdadadadad \ nasadad \ nasada \ n \ n \ n最後一段\ n12345 \ n測試

上述字符串包含136個字符,但String對象的Length屬性存儲字符串以\ n計爲1個chartacter,並將該字符串報告爲124個字符長。

我想提取基於預先計算的開始和長度標記的子字符串。標記創建爲\ n作爲兩個字符。 我怎麼能做以下的equivilent在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); 

我不能使用字符串,因爲我lenght 136偏移是字符串的C#表示的邊界之外。

+0

如果您的字面意思是'\ n'(反斜槓和'n',而不是換行符),則需要使用逐字字符串文字或'\\ n'。 – Esailija

+0

字符串是從html textarea創建的,所以\ n字符存儲在數據庫 – TGH

回答

1

它不會減去\ n字符,它只是將一個換行符\ n作爲一個字符來計數,這是正確的。

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代替\ntrue Windows上的換行符是"\r\n"CR LF。雖然許多控件等將處理\n的罰款,但文件和其他東西可能預計爲\r\n

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

+1中。更明顯的可能是檢查'「\ n」.Length'是1,而'Environment.NewLine.Length'是2。 –

1

你不計算'\'它的存在告訴系統的字符正確的東西「特殊」。在你的情況下,它恰好是一個換行\n。它也可以是一個標籤\t,回車\r ... 所以數學是正確的。

相關問題