Почему я продолжаю получать String вне диапазона? - PullRequest
1 голос
/ 12 октября 2011
return nameString.substring(nameString.indexOf(" ", 0), nameString.lastIndexOf(" ", 0));

Почему он продолжает возвращать ошибку? Я просто хочу вернуть строку из первого встречающегося пробела в последний встречающийся пробел в строке?

Ответы [ 2 ]

4 голосов
/ 12 октября 2011

LastIndexOf

public int lastIndexOf(String str,
                       int fromIndex)

Возвращает индекс в этой строке последнего вхождения указанной подстроки с обратным поиском, начиная с указанного индекса ... Если такого значения не существует, возвращается -1.

Избавьтесь от , 0 параметров для indexOf и lastIndexOf. Когда вы передаете fromIndex 0 в lastIndexOf, он ищет в обратном направлении от начала строки, чтобы найти совпадение. Когда он не находит его, он возвращает -1, что является недопустимым аргументом для подстроки.

return nameString.substring(nameString.indexOf(" "), nameString.lastIndexOf(" "));
1 голос
/ 12 октября 2011

Давайте разберем ваш вопрос по частям

String nameString = "Your name is Matt";

indexOf: он начинает чтение слева направо и останавливается, когда найден первый соответствующий символ, и возвращает позицию символа

 nameString.indexOf("M", 0) /* returns 13 */
 nameString.indexOf(" ", 0) /* returns 4 (it's placed at 4'th position in the given sentence) */

lastIndexOf: начинает читать справа налево и останавливается, когда совпадает char, и возвращает позицию совпадающего char

nameString.lastIndexOf("t", 17)  /* returns 16 */
nameString.lastIndexOf(" ", 17)  /* returns 12 */
nameString.lastIndexOf(" ", 0)  /* returns -1, 

Внимание: вы ошиблись, указав позицию 0, она читается справа налево и не нашла ничего подходящего, поэтому возвращает -1) * /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...