在以下代码中:
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指数中发生的事情。 起初我认为这是一个空间,当我滑过一条线时,它以某种方式创建,但之后它没有被包含在测试字符串中。
提前致谢。
答案 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?假
如您所见,每个其他角色都是换行符。