views:

222

answers:

3

I'm curious why the String.indexOf is returning a 0 (instead of -1) when asking for the index of an empty string within a string.

The Javadocs only say this method returns the index in this string of the specified string, -1 if the string isn't found.

To me this behavior seems highly unexpected, I would have expected a -1. Any ideas why this unexpected behavior is going on? I would at the least think this is worth a note in the method's 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
+12  A: 

Well, if it helps, you can think of "FOO" as "" + "FOO".

Toon Van Acker
Indeed, the empty string can be found between any two adjacent characters in a string as well as at the start and end. The first such instance is the very start of the string, namely position 0.
Joey
How many times does the empty string occur in "FOO"?
Alison
@Ali: ∞ + 1, I'd say.
Joey
I would say empty string occurs zero times in the string Ali G but obviously I'm wrong.
tmeisenh
@Ali G: 4 distinct times: At position 0, 1, 2, and 3 as you can easily verify by calling `.substring(0,0)` up to `.substring(3,3)` on `"FOO"`.
Joachim Sauer
StringTokenizer st = new StringTokenizer("FOO","");System.out.println(st.countTokens()); // outputs 1So it looks like the empty string exists once according to StringTokenizer
tmeisenh
@Johannes, @tmeisenh, @Joachim: great answers, definitely agree ;-)
Alison
@Joachim: However, you can concatenate the empty string any number of times at any position of a string and still get the desired result.
Joey
+16  A: 

The empty string is everywhere, and nowhere. It is within all strings at all times, permeating the essence of their being, yet as you seek it you shall never catch a glimpse.

How many empty strings can you fit at the beginning of a string? Mu

The student said to the teacher,

Teacher, I believe that I have found the nature of the empty string. The empty string is like a particle of dust, and it floats freely through a string as dust floats freely through the room, glistening in a beam of sunlight.

The teacher responded to the student,

Hmm. A fine notion. Now tell me, where is the dust, and where is the sunlight?

The teacher struck the student with a strap and instructed him to continue his meditation.

Pointy
A: 

By using the expression "", you are actually referring to a null string. A null string is an ethereal tag placed on something that exists only to show that there is a lack of anything at this location.

So, by saying "".indexOf( "" ), you are really asking the interpreter:

Where does a string value of null exist in my null string?

It returns a zero, since the null is at the beginning of the non-existent null string.

To add anything to the string would now make it a non-null string... null can be thought of as the absence of everything, even nothing.

exoboy