Содержит ли сообщение last
вообще? Если нет, location
будет отрицательным, и вам следует немедленно прекратить обработку. Эта ошибка может остаться незамеченной, потому что после этого вы добавляете 5 к location
, что делает его равным как минимум 4, даже если last
отсутствует в строке (спасибо SJuan76 ).
Даже если сообщение содержит last
, гарантируется ли, что за ним следует хотя бы один дополнительный символ? Если нет, то добавление 5 к location
наверняка укажет за пределы строки.
Более того, end
также может быть отрицательным, если в строке после location
нет &
. Вы должны как-то это обработать (то есть, установив end
в этом случае длину сообщения).
Кроме того, если message
является строкой, вы можете просто извлечь ее подстроку с помощью метода substring
, без необходимости использования getChars
magic.
Возможно, лучшим решением было бы что-то вроде этого (я предполагаю, что message
- это что-то вроде URL, и вы ищете часть между last>
и следующим &
, основываясь на вашем комментарии для одного из других ответов):
location = message.indexOf("last>");
if (location >= 0) {
String lastS;
location += 5;
end = message.indexOf('&', location);
if (end == -1) {
// Handle the case when there is no "&" after "last>" in the message
} else {
lastS = message.substring(location, end);
}
} else {
// Handle the case when there is no "last>" in the message
}