当前位置: 代码迷 >> java >> 使用子字符串会导致StringIndexOutOfBoundsException:字符串索引超出范围:-1异常
  详细解决方案

使用子字符串会导致StringIndexOutOfBoundsException:字符串索引超出范围:-1异常

热度:107   发布时间:2023-07-26 14:50:04.0

搜索时,标记处的字符串为abc: xyz

但这给了

`StringIndexOutOfBoundsException`: String index out of range: -1 exception. 

在行:

tag = strLine.substring(0, strLine.indexOf(':'));

可能是什么错误?

提前致谢!

strLine.substring(0, strLine.indexOf(':')); 

上面的代码将尝试从0(含)到某个正整数值的子字符串。 但是strLine.indexOf(':')返回-1因为: strLine不存在。 所以最后该方法成为subString(0, -1) ,这给了你错误:-

StringIndexOutOfBoundsException: String index out of range: -1 exception.

做这样的事情来防止:-

int i = strLine.indexOf(':')
if(i != -1)
tag = strLine.substring(0, i);
else {//handle error here}

要么

try{
tag = strLine.substring(0, strLine.indexOf(':'));
}
catch(StringIndexOutOfBoundsException ex){
// catch here
}

PS: StringIndexOutOfBoundsException是运行时异常,不应捕获,但应进行处理/修复。

如果indexOf找不到子字符串,则结果为-1,这不是子字符串允许的参数。

这意味着您的字符串不包含symbol(:) 如果您的strLine =“ xyz:abc”,那么它将输出

String output="xyz:abc".substring(0, "xyz:abc".indexOf(':'));
System.out.println(output);

无论您提供了什么字符串,都可以正常工作。 请参阅以下程序供您参考:

public class Consistent {
    public static void main(String[] args) throws IOException {
        String s= "abc: xyz";
        String s1 = "abc";
        System.out.println(s.substring(0, s.indexOf(':')));
        System.out.println(s1.substring(0, s1.indexOf(':')));// This line will give error whatever you are getting, as it is not found
//to avoid first check if the String contains this identifier
if(s1.contains(":"))
System.out.println(s1.substring(0, s1.indexOf(':')));//It will work fine now
}
}