我正在制作一个电影租赁程序,我需要将一个字符串数组写入Movie Objects的ArrayList中。一切都正确编译,但是当它运行时我得到一个超出范围的String索引错误。以下是所用方法的代码:
public static void arrayToList(Store store, String[] array)
{
String title;
int copies;
int index = -1;
for(int i = 0;i < array.length;i++)
{
index = getIndex(array[i]);
title = array[i].substring(0,index + 1);
copies = Integer.parseInt(array[i].substring(index+1,array[i].length()));
store.addMovie(title,copies);//adds movie to arrayList
}
}
public static int getIndex(String line)
{
boolean found = false;
int index =0;
for(int i = 0;i < line.length();i++)
{
if(line.charAt(i) == ';')
{
index = i;
}
}
return index;
}
getIndex()方法获取在影片的标题和副本数之间插入分号的索引,因此当从外部文件中读取分号时,可以将两者分开,然后将其用作创建Movie对象的参数。
有关为什么我的索引超出界限错误的任何想法?
以下是完整的错误消息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.substring(String.java:1950)
at MovieRentals.MovieRunner.arrayToList(MovieRunner.java:158)
at MovieRentals.MovieRunner.main(MovieRunner.java:32)
答案 0 :(得分:1)
如果substring方法的第二个参数的长度小于第一个参数,则新索引的长度将为负,并且其值将在StringIndexOutOfBoundsException中抛出。
答案 1 :(得分:0)
您正在获取StringIndexOutOfBoundsException,这意味着您在空字符串上操作的String和返回的索引值为0(在 getIndex 方法中将默认索引值设置为0)。当您调用以下语句时,它会抛出错误
title = array [i] .substring(0,index + 1);
在调用getIndex方法之前,请确保检查字符串是否为空且不为空