|
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 параметр номер символа начала, а потом количество вырезаемых символов, хотя надо последний символ вхождения(его номер). Еще раз спасибо
|
|