线程" main"中的例外情况java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1

时间:2015-04-22 23:38:45

标签: java indexing substring bounds

我正在制作一个电影租赁程序,我需要将一个字符串数组写入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)

2 个答案:

答案 0 :(得分:1)

如果substring方法的第二个参数的长度小于第一个参数,则新索引的长度将为负,并且其值将在StringIndexOutOfBoundsException中抛出。

答案 1 :(得分:0)

您正在获取StringIndexOutOfBoundsException,这意味着您在空字符串上操作的String和返回的索引值为0(在 getIndex 方法中将默认索引值设置为0)。当您调用以下语句时,它会抛出错误

title = array [i] .substring(0,index + 1);

在调用getIndex方法之前,请确保检查字符串是否为空且不为空