为什么 C# 的 LastIndexOf 会这样?

问题描述 投票:0回答:4

我有以下代码:

string s = "Hello, World!";
Console.WriteLine(s.LastIndexOf("World"));//7
Console.WriteLine(s.LastIndexOf("World", 7));//-1

为什么第二次调用

LastIndexOf
的结果是-1而不是7?

c# .net string frameworks lastindexof
4个回答
3
投票

来自MSDN

搜索从此实例的 startIndex 字符位置开始,并向开头向后进行,直到找到某个值或检查了第一个字符位置。例如,如果 startIndex 为 Length - 1,则该方法会搜索字符串中从最后一个字符到开头的每个字符。

由于搜索是向后进行的,因此在 7 之前不存在包含

World
的索引。


0
投票

如果您查看 LastIndexOf Method (Char, Int32):

doc

如果找到该字符,则返回 value 的从零开始的索引位置;如果未找到该字符或当前实例等于 String.Empty,则返回 -1。

由于7似乎是最后一个索引,所以这个位置后面是空的,因此返回值为

-1


0
投票

当您只将第一个参数传递给

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”。我觉得说的很清楚了。


-1
投票

搜索从指定的字符位置开始,并按照文档所述向后向字符串的开头进行。

在您的情况下,在 0 - 7“Hello, W”范围内没有出现单词“World”

© www.soinside.com 2019 - 2024. All rights reserved.