有谁知道原因:
" <exception>".LastIndexOf("<",0) returns -1 (wrong)
,而
" <exception>".LastIndexOf("<") returns 2 (right)
和
"<exception>".LastIndexOf("<",0) returns 0 (right)
这是一个错误还是我误解了LastIndexOf-Method?
答案 0 :(得分:76)
您误解了LastIndexOf
方法的特定重载。
docs说明以下内容:
搜索从指定的字符位置开始,然后向后朝向字符串的开头。
请注意,它显示为 相反,如果使用仅占用子字符串的重载,则搜索将从字符串的末尾开始,因此正确地找到指示的子字符串。backward
。因此,如果您从位置0
开始,那个位置没有"<"
子字符串,前面的那个位置,因此结果为-1
。< / p>
答案 1 :(得分:22)
string, int32
的{{1}}重载,in the description,“报告此实例中最后一次出现的指定Unicode字符的从零开始的索引位置。搜索从指定字符位置并向向后朝字符串开始。“
因此,如果您传入LastIndexOf
,它将仅检查第一个字符,而不是检查 0
中的整个字符串。
答案 2 :(得分:10)
第二个参数不会像你认为的那样做:
LastIndex(char value, int startIndex)
startIndex是开始通过字符串搜索向后的字符,所以如果你传递0然后只检查第一个字符...
要从末尾检查整个字符串,您必须传递字符串-1的长度。
答案 3 :(得分:9)
文档(http://msdn.microsoft.com/en-us/library/bc3z4t9d.aspx#Y0)说:
搜索从startIndex字符位置开始 实例和向后开始直到任一值 找到或检查第一个字符位置。对于 例如,如果startIndex是Length - 1,则该方法将搜索每个 字符串中最后一个字符到开头的字符。
(我的重点)
所以这个:
" <exception>".LastIndexOf("<",0)
从0开始并向后工作,因此正确地找不到结果并返回-1。
我认为混淆是LastIndexOf向后计数,而IndexOf向前计数。
答案 4 :(得分:4)
我认为你误解了这种方法。
第二个参数是您开始搜索的字符。如果从0位置的字符向后搜索......结果是正确的。
答案 5 :(得分:4)
这是一个错误,因为LastIndexOf **()**从指定位置向后搜索。
试试这段代码:
" <exception>".LastIndexOf("<", 5)
希望它有用
答案 6 :(得分:3)
那是因为第二个参数表示它应该从零位开始,从那里看向字符串的开头。
如果字符串位于字符串的开头,您只能找到该字符串,并且只有在您查找长度为一个字符的字符串时才会找到该字符串:
"<exception>".LastIndexOf("<",0) // returns 0
"<exception>".LastIndexOf("<ex",0) // returns -1
答案 7 :(得分:2)
没关系
第一个表达式从字符串的0元素中找到<
符号以开始e。 G。没有这样的辛博尔找到;
第二个搜索整个字符串并找到位置2
并且最后一个从0 simbol搜索等于&lt;并返回0位置。
msdn)link
答案 8 :(得分:2)
haystack.LastIndexOf("needle")
在字符串中搜索“needle”-string的最后一次出现。
如果要搜索的值永不发生,方法LastIndexOf
和IndexOf
将返回-1
。
LastIndexOf
从&lt; - 从右到左寻求,而
IndexOf
从从左到右寻找 - &gt;
字符串的字符索引从0
开始,从左到右递增
当没有提供第二个参数时,两种方法都假设偏移索引为0
该功能也存在于JavaScript lastIndexOf
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
由于在最后一种情况下,在<
的haystring的字符间隔内不存在字符串或字符0-1
,因此正确返回-1
。