Java String.indexOf和空字符串

时间:2010-04-21 13:50:41

标签: java string

我很好奇为什么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

5 个答案:

答案 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,但我猜数学家参与其中......