我有以下代码:
string s = "Hello, World!";
Console.WriteLine(s.LastIndexOf("World"));//7
Console.WriteLine(s.LastIndexOf("World", 7));//-1
为什么第二次调用
LastIndexOf
的结果是-1而不是7?
来自MSDN:
搜索从此实例的 startIndex 字符位置开始,并向开头向后进行,直到找到某个值或检查了第一个字符位置。例如,如果 startIndex 为 Length - 1,则该方法会搜索字符串中从最后一个字符到开头的每个字符。
由于搜索是向后进行的,因此在 7 之前不存在包含
World
的索引。
如果您查看 LastIndexOf Method (Char, Int32): 的
doc如果找到该字符,则返回 value 的从零开始的索引位置;如果未找到该字符或当前实例等于 String.Empty,则返回 -1。
由于7似乎是最后一个索引,所以这个位置后面是空的,因此返回值为
-1
当您只将第一个参数传递给
LastIndexOf()
时,其行为与IndexOf()
相同,返回第一个匹配发生和子字符串出现的索引。所以它是开始索引:
0=>H
1=>e
2=>l
3=>l
4=>o
5=>,
6=>' '
7=>W
一切从这里开始。
如果你传递第二个参数,一切都和我之前说的一样:你的索引又是“W”,但在这里你将从:
'W'
6=>' '
5=>,
4=>o
3=>l
2=>l
1=>e
0=>H
而你只是没有子字符串“World”。我觉得说的很清楚了。
搜索从指定的字符位置开始,并按照文档所述向后向字符串的开头进行。
在您的情况下,在 0 - 7“Hello, W”范围内没有出现单词“World”