2013-07-24 3 views
1

Привет Я новичок в Java в моем коде я получаю ошибку, как индекс Струнный из диапазона: -21 Мой кодСтрока индекса вне диапазона: -21

String targetLexForRemaining=categoryWordStr.substring(categoryWordStr.indexOf("@@")+2,categoryWordStr.indexOf(" ")); 

На этой линии я нахожусь получить сообщение об ошибке? Что мне делать?

+4

Что 'categoryWordStr' содержит при запуске этого кода? –

+1

1) * "plz help Thanx in advanced" * Пожалуйста, используйте правильное написание слов типа «ты», «твой», «пожалуйста» и «спасибо». Это облегчает людям понимание и помощь. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –

+0

Размер категорииWordStr меньше, чем 21 – MayurB

ответ

9

IndexOutOfBoundsException отбрасывается, если beginIndex отрицательный, или endIndex больше, чем длина этой строки объекта или beginIndex больше endIndex. Прочтите это documentation.

Вы должны проверить эти условия перед вызовом метода subString.

int beginIndex=categoryWordStr.indexOf("@@"); 
int endIndex=categoryWordStr.indexOf(" "); 

if(beginIndex!=-1 && beginIndex<=endIndex && endIndex<=categoryWordStr.length()) 
{ 
    //Call Substring 
} 
+0

Большое спасибо за вашу ценную поддержку – user2469963

2

Я подозреваю, что есть пространство (»«) раньше, чем „@@“ вы ищете, который испортит второй аргумент substring. Если вы хотите получить «текст между @@ и первым пространством», то вы должны использовать перегрузку indexOf, которая принимает начальную точку:

int start = categoryWordStr.indexOf("@@"); 
// TODO: Validate that startisn't -1 
int end = categoryWordStr.indexOf(" ", start); 
// TODO: Validate that end isn't -1 
String targetLexForRemaining = categoryWordStr.substring(start + 2, end); 
Смежные вопросы