问题描述
搜索时,标记处的字符串为abc: xyz
但这给了
`StringIndexOutOfBoundsException`: String index out of range: -1 exception.
在行:
tag = strLine.substring(0, strLine.indexOf(':'));
可能是什么错误?
提前致谢!
1楼
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
是运行时异常,不应捕获,但应进行处理/修复。
2楼
如果indexOf
找不到子字符串,则结果为-1,这不是子字符串允许的参数。
3楼
这意味着您的字符串不包含symbol(:)
。
如果您的strLine =“ xyz:abc”,那么它将输出
String output="xyz:abc".substring(0, "xyz:abc".indexOf(':'));
System.out.println(output);
4楼
无论您提供了什么字符串,都可以正常工作。 请参阅以下程序供您参考:
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
}
}