我很好奇为什么String.indexOf
在请求字符串中空字符串的索引时返回0(而不是-1)。
Javadocs只说这个方法返回指定字符串的字符串中的索引,如果找不到字符串,则返回-1。
对我来说,这种行为似乎非常出乎意料,我原本期望-1。任何想法为什么会发生这种意外行为?我至少认为这在方法的Javadocs中值得注意......
System.out.println("FOO".indexOf("")); // outputs 0 wtf!!!
System.out.println("FOO".indexOf("bar")); // outputs -1 as expected
System.out.println("FOO".indexOf("F")); // outputs 0 as expected
System.out.println("".indexOf("")); // outputs 0 as expected, I think
答案 0 :(得分:105)
空字符串无处不在,无处可去。它始终在所有的弦中,渗透着它们存在的本质,但是当你寻求它时,你永远不会瞥见它。
您可以在字符串的开头放置多少个空字符串? 穆
学生对老师说,
老师,我相信我已经找到了空字符串的本质。空的绳子就像一团灰尘,随着灰尘自由地漂浮在房间里,在阳光下闪闪发光,它可以自由地漂浮在绳子上。
老师回应了学生,
嗯。一个好的概念。现在告诉我,灰尘在哪里,阳光在哪里?
老师用带子敲打学生并指示他继续冥想。
答案 1 :(得分:28)
好吧,如果有帮助,您可以将"FOO"
视为"" + "FOO"
。
答案 2 :(得分:1)
int number_of_empty_strings_in_string_named_text = text.length() + 1
所有字符均以空String
分隔。此外,开头和结尾都有空String
。
答案 3 :(得分:0)
通过使用表达式“”,您实际上是指一个空字符串。空字符串是放置在某些东西上的空灵标记,只是为了表明此位置缺少任何内容。
所以,通过说“”.indexOf(“”),你真的在问翻译:
我的空字符串中是否存在字符串值null?
它返回零,因为null位于不存在的空字符串的开头。
要向字符串添加任何内容,现在将其设为非空字符串... null可以被认为是缺少所有内容,甚至没有。
答案 4 :(得分:0)
使用代数方法,""是字符串连接的中性元素:x +"" == x和"" + x == x(虽然+在这里是非交换的)。
然后它也必须是:
x.indexOf ( y ) == i and i != -1
<==> x.substring ( 0, i ) + y + x.substring ( i + y.length () ) == x
当y =&#34;&#34;时,如果i == 0且x.substring(0,0)==&#34;&#34;则成立。 我没有设计Java,但我猜数学家参与其中......