jcg*_*iam 7 c# java string logic indexof
我的一个朋友带着这种我无法解释的奇怪行为来找我,任何洞察力的观点都会受到赞赏.
我正在运行VS 2005(C#2.0),以下代码显示了该行为
int rr = "test".IndexOf("");
Console.WriteLine(rr.ToString());
Run Code Online (Sandbox Code Playgroud)
上面的代码,打印"0",清楚地表明它应该返回-1
这也发生在Java中,下面的Class显示了这种行为:
public class Test{
public static void main(String[] args){
System.out.println("Result->"+("test".indexOf("")));
}
}
Run Code Online (Sandbox Code Playgroud)
我正在运行Java 1.6.0_17
Jos*_*Lee 10
这不是例外,而是如何将自然结果indexOf和startsWith定义.
你声称"test".indexOf("")应该返回-1.这基本上等同于"test".startsWith("")应该返回的声明false.为什么是这样?虽然这个案例在文档中被特别指出为返回true,但这不仅仅是一个武断的决定.
"test".startsWith("te")例如,你会如何决定?最简单的方法是使用递归.由于两个字符串都以字符开头,因此't'您调用"est".startsWith("e")并返回结果.同样,您将调用"st".startsWith("")并返回结果.但是你已经知道答案应该是true,所以这就是每个字符串开头的原因"".
0是正确的.Javadocs指出其indexOf工作原理如下:
返回的整数是最小值k,这样:
Run Code Online (Sandbox Code Playgroud)this.startsWith(str, k)
任意以字符串""等于原始字符串(每串开头""),因此,最小k的str = ""是始终为0.