字符串索引超出范围:-21

时间:2013-07-24 12:30:40

标签: java string

你好我在我的代码中是java的新手我得到一个错误,因为String索引超出范围:-21 我的代码是

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

在这一行我收到错误? 我该怎么做?

2 个答案:

答案 0 :(得分:9)

如果beginIndex为否定,或endIndex大于此String对象的长度,或beginIndex大于endIndex,则会引发{p> IndexOutOfBoundsException 。阅读documentation

在调用subString方法之前,您应该检查这些条件。

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

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

答案 1 :(得分: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);