Имя: Пароль:
IT
 
Java: substring возвращает StringIndexOutOfBoundsException
0 Rizhij_Nikitos
 
19.12.13
15:58
Пишу под java в eclipse

Элементарный кусок кода:
String str = "Привет, я новая строка! Во мне содержится много определений для примера работы со строками. Сейчас будем разбираться.";
String str1="се";
String str2=str.substring(str.toLowerCase().indexOf(str1),str1.length());

3 строка возвращает мне исключени по выходу за границы строки.
Лезу в отладчик, начинаю вычислять и реально сваливаюсь в это исключение, хотя str.lenght() возвращает 117, даже str.substring(2,1) возвращает мне то же исключение...

Че не так то? Чего я не понимаю?
1 sapphire
 
19.12.13
16:02
substring

public String substring(int beginIndex,
                        int endIndex)
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.
Examples:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

Parameters:
beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.
Returns:
the specified substring.
Throws:
IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex.
2 sapphire
 
19.12.13
16:03
str.substring(2,1)
beginIndex is larger than endIndex
3 Rizhij_Nikitos
 
19.12.13
16:04
Долбаная 1Ска...
4 Rizhij_Nikitos
 
19.12.13
16:06
Спасибо, совсем запарился походу.
5 sapphire
 
19.12.13
16:11
(4) Будь внимателен, смотри:
String str2=str.substring(str.toLowerCase().indexOf(str1),str1.length());

разбираем по частям, то, что справа:

substring принимает в твоем случае 2 параметра типа int:

1.beginIndex=str.toLowerCase().indexOf(str1);
и здесь все хорошо
2.endIndex = str1.length; ВОТ ЗДЕСЬ ОШИБКА
т.к. длина str1=2, а beginIndex явно больше.

Таким образом правильно будет заменить str1.length на просто str1.length:
String str2=str.substring(str.toLowerCase().indexOf(str1),str.length());
6 Rizhij_Nikitos
 
19.12.13
16:20
да, да, я понял что я по примеру функции Сред() пытаюсь засунуть в 1 параметр номер символа начала, а потом количество вырезаемых символов, хотя надо последний символ вхождения(его номер). Еще раз спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn