2015-04-22 61 views
0

我正在電影租賃程序和我需要編寫一個字符串數組到Movie對象的ArrayList。一切都編譯正確,但是當它運行時,我得到一個字符串索引超出界限的錯誤。下面是用於該方法的代碼:異常在線程「主」 java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:1

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) 

回答

1

如果子方法的第二個參數的長度小於所述第一參數,新的索引的長度將是負的並且它的值將在被拋出的StringIndexOutOfBoundsException。

0

您將得到一個StringIndexOutOfBoundsException,這意味着您正在對一個空字符串進行操作的字符串以及返回的索引值爲0(因爲您在getIndex方法中將默認索引值設置爲0)。當你調用下面的語句時,它是拋出錯誤

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

在調用getIndex方法之前,請確保您檢查字符串是否爲空且不爲空

相關問題