0

次のコードでは:

static void Main(string[] args)
{
    string MultiLineString = @"This is a
random sentence";
    int index=0;

    string test = "";

    Console.WriteLine(MultiLineString[9].ToString()); //it should print 'r' but it prints a white space

    for (int i = 0; i < MultiLineString.Length; i++)
    {
        if (MultiLineString[i] == 'r')
            index = i;
    }
    Console.WriteLine(index); // 11 is the index of 'r' in "random"

    foreach (char ch in MultiLineString)
        if (ch == ' ')
            test += "_";
        else
            test += ch;

    Console.WriteLine(test);
    // the output is:
    // This_is_a
    //random_sentece

}

9-10 インデックスで何が起こっているかを理解するのに苦労しています。最初は、行をスキップしたときに何らかの形で作成されたスペースだと思っていましたが、テスト文字列には含まれていませんでした。

前もって感謝します。

4

3 に答える 3

3
MultiLineString[0] -> 'T'
MultiLineString[1] -> 'h'
MultiLineString[2] -> 'i'
MultiLineString[3] -> 's'
MultiLineString[4] -> ' '
MultiLineString[5] -> 'i'
MultiLineString[6] -> 's'
MultiLineString[7] -> ' '
MultiLineString[8] -> 'a'
MultiLineString[9] -> '\r'
MultiLineString[10] -> '\n'
MultiLineString[11] -> 'r'

環境に応じて、改行は"\r\n""\r"、または のいずれかになります"\n"。ほとんどの Windows 環境では、通常、改行は"\r\n"(2 文字) として表されます。

これを行うことで、文字列内の文字の ASCII 値を (視覚的な表現だけでなく) 見ることができます。

for(int i = 0; i < MultiLineString.Length; i++)
{
    Console.WriteLine("{0} - {1}", i, (int)MultLineString[i]);
}

\r13 になり\n、10 になります。

于 2013-01-26T18:54:45.583 に答える
0

文字列を複数行リテラルとして宣言したときに、文字列 ("\n\r") に改行を明示的に含めました。改行文字は、それぞれ位置 9 と 10 にあります。

「逐語的な文字列リテラル」は、C# 言語仕様でカバーされています - SO: Multiline String Literal in C# の文字列リテラルと同様です。

' 'コード 32 で文字を検索すると、 '\n'(10) や'\r'(13) とは異なり、改行「空白」文字ではなく、実スペースのみが検索されます。

他にも多くの「スペースのような」文字があることに注意してください。それらの特定の処理を実行する必要がある場合は、Char.IsWhiteSpace などのChar 構造のメソッドを確認してください。

于 2013-01-26T18:53:57.743 に答える
0

他の人が言ったように、改行エスケープシーケンスを考慮していないため\n、インデックスは1ずれています。

たとえば、次のコードを見てください。

using System;

public class Test
{
    public static void Main()
    {
        string test = @"T
e
s
t";
        for (int i =0 ; i < test.Length; i++)
        {
            Console.WriteLine("{0} == \\n? {1}", test[i], test[i] == '\n');
        }
    }
}

出力は次のとおりです。

T == \n? 間違い

== \n? 真
e == \n? 間違い

== \n? 真
== \n? 間違い

== \n? 真
t == \n? 間違い

ご覧のとおり、他のすべての文字は改行文字です。

于 2013-01-26T19:00:28.723 に答える