C# string.LastIndexOf()错误?
有人知道原因吗:C# string.LastIndexOf()错误?,c#,string,indexof,C#,String,Indexof,有人知道原因吗: " <exception>".LastIndexOf("<",0) returns -1 (wrong) ”.LastIndexOf(字符串,int32重载LastIndexOf表示,“报告此实例中指定Unicode字符最后一次出现的从零开始的索引位置。搜索从指定的字符位置开始,并向后搜索字符串的开头。” 因此,如果您传入0,它将只检查第一个字符,而不检查0中的整个字符串。您误解了LastIndexOf方法的特定重载 缔约国声明如下: 搜索从指定的字符位置
" <exception>".LastIndexOf("<",0) returns -1 (wrong)
”.LastIndexOf(字符串,int32
重载LastIndexOf
表示,“报告此实例中指定Unicode字符最后一次出现的从零开始的索引位置。搜索从指定的字符位置开始,并向后搜索字符串的开头。”
因此,如果您传入
0
,它将只检查第一个字符,而不检查0
中的整个字符串。您误解了LastIndexOf
方法的特定重载
缔约国声明如下:
搜索从指定的字符位置开始,向后搜索字符串的开头
请注意,它表示
向后
。因此,如果从位置0
开始,则没有“,这是因为第二个参数表示它应该从位置0开始,并从那里向字符串的开头看
仅当字符串位于字符串的开头,并且仅当您要查找一个字符长的字符串时,才能找到该字符串:
"<exception>".LastIndexOf("<",0) // returns 0
"<exception>".LastIndexOf("<ex",0) // returns -1
“”.LastIndexOf(“我认为您误解了该方法
第二个参数是开始搜索的字符。如果从0位置的字符向后搜索,结果是正确的。第二个参数的作用与您认为的不同:
LastIndex(char value, int startIndex)
startIndex是开始向后搜索字符串的字符,因此如果传递0,则只检查第一个字符
要从末尾检查整个字符串,必须传递字符串的长度-1
看没关系
第一个表达式找到文档()的,文档()表示:
搜索从该文件的startIndex字符位置开始
实例和向开始处向后进行,直到其中一个值
已找到或已检查第一个字符位置。有关
例如,如果startIndex的长度为-1,则该方法将每隔
从字符串中的最后一个字符到开头的字符
(我的重点)
因此:
" <exception>".LastIndexOf("<",0)
“”。LastIndexOf(“这是一个错误,因为LastIndexOf**()**从指定位置向后搜索
请尝试以下代码:
" <exception>".LastIndexOf("<", 5)
.LastIndexOf(“
haystack.LastIndexOf(“针”)
在字符串中搜索最后出现的“针”字符串
- 如果要搜索的值从未出现,则方法
LastIndexOf
和IndexOf
返回-1
LastIndexOf
从
- 字符串的字符索引从
0
开始,从左到右递增
- 当没有提供第二个参数时,这两种方法都假定偏移索引为
0
- 该函数也存在于as
lastIndexOf
- (注意:mixedcase或camelBack套管)并且在JavaScript中设置超出haystring长度边界的索引是可以的,但在C中,这将导致
System.ArgumentOutOfRangeException:<0 | |>this.length
异常
示例:
" <exception>".LastIndexOf("<", 3)
//> returns 2
" <exception>".LastIndexOf("<", " <exception>".Length)
//> returns 2
" <exception>".LastIndexOf("<", " <exception>".Length+1)
//> ArgumentOutOfRangeException
" <exception>".LastIndexOf("<", 2)
//> returns 2
" <exception>".LastIndexOf("<", -1)
//> returns -1
" <exception>".LastIndexOf("<", -2)
//> ArgumentOutOfRangeException
" <exception>".LastIndexOf("<", 1)
//> returns -1
”.LastIndexOf(“啊,好的,非常感谢。我刚刚读了intellisense菜单中的描述,所以我不知道它是反向进行的。”)imo,一个更有趣的问题是,为什么那些人选择这样实现它。@antony.trupe这种方式你可以在找到第一个实例后停止。@antony.trupe:如果你仔细想想,这是唯一明智的方法。如果函数的目的是获取字符串最后一次出现的索引,那么就为w提供一个起始索引从中向前推进将是毫无意义的。好吧,现在有了upvotes,这肯定是我迄今为止写的最高估的答案。如果你想对答案进行upvote,请对作者在解决方案中考虑并解释了这些想法的答案进行upvote,而不仅仅是复制文档。
" <exception>".LastIndexOf("<", 5)
" <exception>".LastIndexOf("<", 3)
//> returns 2
" <exception>".LastIndexOf("<", " <exception>".Length)
//> returns 2
" <exception>".LastIndexOf("<", " <exception>".Length+1)
//> ArgumentOutOfRangeException
" <exception>".LastIndexOf("<", 2)
//> returns 2
" <exception>".LastIndexOf("<", -1)
//> returns -1
" <exception>".LastIndexOf("<", -2)
//> ArgumentOutOfRangeException
" <exception>".LastIndexOf("<", 1)
//> returns -1