多行字符串中的奇怪空格

时间:2013-01-26 18:47:04

标签: c# string multiline

在以下代码中:

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指数中发生的事情。 起初我认为这是一个空间,当我滑过一条线时,它以某种方式创建,但之后它没有被包含在测试字符串中。

提前致谢。

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

当声明的字符串为多行文字时,您明确将新行添加到字符串(“\ n \ r”)中。新行字符相应地位于位置9和10。

C# language specification - string literals中的“逐字字符串文字”以及SO:Multiline String Literal in C#

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

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

答案 2 :(得分: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?假

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