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"(两个字符)。

通过执行以下操作,您可以查看字符串中字符的 ASCII 值(而不仅仅是它们的视觉表示):

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

\r将是 13 和\n将是 10。

于 2013-01-26T18:54:45.583 回答
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? 真
s == \n? 错误的

== \n? 真
t == \n? 错误的

如您所见,每个其他字符都是换行符。

于 2013-01-26T19:00:28.723 回答
0

当将字符串声明为多行文字时,您明确地将新行包含在字符串 ("\n\r") 中。换行符分别位于第 9 位和第 10 位。

C# 语言规范中涵盖的“逐字字符串文字” - 字符串文字以及 SO:Multiline String Literal in C#

当您搜索' '代码为 32 的字符时,与'\n'(10) 和'\r'(13) 不同的是,您只会找到真正的空格,而不是换行的“空白”字符。

请注意,还有许多其他“类似空格”的字符,因此如果您需要对它们执行一些特殊处理 - 请查看Char 结构的方法,例如 Char.IsWhiteSpace

于 2013-01-26T18:53:57.743 回答