5

C# で文字列の長さを決定するときに、なぜ \n が 2 文字としてカウントされないのか疑問に思っています。

例: これはテスト コメントです\nサンプル テキスト テスト 123456\nadssssssssss\n\nasdasdasda\nasdadadadad\nasadad\nasada\n\n\n最後の段落\n12345\nテスト

上記の文字列には 136 文字が含まれていますが、文字列を保存する String オブジェクトの Length プロパティは \n を 1 文字としてカウントし、文字列を 124 文字の長さとしてレポートします。

事前に計算された開始マーカーと長さマーカーに基づいて部分文字列を抽出したいと考えています。マーカーは、\n を 2 文字としてカウントして作成されました。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'が 1 つの文字であるということです。改行文字 ( LF) を表します。文字列リテラルのバックスラッシュは、それがエスケープ シーケンスであることを示します。

したがって、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です。それはまた、タブ\t、改行である可能性があります\r...したがって、数学は正しいです。

于 2012-11-21T00:27:10.810 に答える
1

\n 文字を差し引くのではなく、1 つの改行 \n を 1 つの文字としてカウントするだけです。これは正しいことです。

于 2012-11-21T00:01:38.800 に答える