Подтвердить что ты не робот

Java String.indexOf и пустые строки

Мне любопытно, почему 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
4b9b3361

Ответ 1

Пустая строка везде, и нигде. Он всегда находится во всех строках, пронизывая сущность своего существа, но когда вы его ищете, вы никогда не поймете проблеска.

Сколько пустых строк вы можете поместить в начале строки? Mu

Студент сказал учителю,

Учитель, я считаю, что я нашел природу пустой строки. Пустая строка похожа на частицу пыли, и она свободно плавает через нитку, поскольку пыль свободно плавает по комнате, сверкая лучами солнечного света.

Учитель ответил ученику,

Хм. Прекрасное понятие. Скажи мне, где пыль, и где солнечный свет?

Учитель ударил ученика ремнем и поручил ему продолжить медитацию.

Ответ 2

Хорошо, если это поможет, вы можете думать о "FOO" как "" + "FOO".

Ответ 3

int number_of_empty_strings_in_string_named_text = text.length() + 1

Все символы разделяются пустым String. Кроме того, пустой String присутствует в начале и в конце.

Ответ 4

Используя выражение "", вы на самом деле ссылаетесь на пустую строку. Нуль-строка - это эфирный тег, помещенный на нечто, что существует только для того, чтобы показать, что в этом месте отсутствует что-то.

Итак, говоря ".indexOf(" "), вы действительно спрашиваете переводчика:

Где строковое значение null существует в моей пустой строке?

Он возвращает ноль, так как нуль находится в начале несуществующей нулевой строки.

Чтобы добавить что-нибудь в строку, теперь сделайте ненулевую строку... null можно рассматривать как отсутствие всего, даже ничего.

Ответ 5

Используя алгебраический подход, "является нейтральным элементом конкатенации строк: x +" "== x и" " + x == x (хотя + здесь не коммутативен).

Тогда это также должно быть:

x.indexOf ( y ) == i and i != -1 
<==> x.substring ( 0, i ) + y + x.substring ( i + y.length () ) == x

когда y = ", это выполняется, если я == 0 и x.substring(0, 0) ==" ". Я не проектировал Java, но я думаю, в нем участвовали математики...