2013-11-23 99 views
1

從我的類中調用函數時出現以下錯誤: java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:-1 雖然我使用系統打印來查看我正在傳遞substring()函數的輸入,並且一切看起來都是正確的。函數isContained()返回一個布爾值,用於定義作爲參數傳遞的子字符串是否在單詞列表中。我的代碼是:字符串索引越界異常java

for(int i=0; i<=size; i++) 
    for(int j=i+1; j<=size; j++) 
     if(isContained(str.substring(i,j-i))) 
      System.out.println(str.substring(i,j-i)); 

其中size是我傳遞的功能

+0

我認爲問題是當我= 0和j =大小。 – flyman

+2

你甚至試圖調試它 –

+0

我不認爲問題在那裏飛。出現錯誤i = 1 .. – Rakim

回答

4

要調用str.substring(i, j-i)這意味着substring(beginIndex, endIndex),不substring(beginIndex, lengthOfNewString)字符串(STR)的大小。

這種方法的假設的是,endIndex大於或等於beginIndex,如果不是新的索引的長度將是負的並且它的值將在StringIndexOutOfBoundsException被拋出。

也許你應該改變你的方法做一些像str.substring(i, j)


此外,如果size是你str的長度然後

for (int i = 0; i <= size; i++) 

也許應該

for (int i = 0; i < size; i++) 
+0

你是對的......我以爲方法正在接受(索引,長度) – Rakim

0

我認爲你需要改變循環條件這是這裏的問題。當您執行<=size並且索引從i=0開始時,您正循環一次迭代。你可以改變這個

for(int i=0; i<=size; i++) 

for(int i=0; i<size; i++) 

,並採取有關內環條件照顧。

+0

爲什麼在這裏進行負面投票? – SASM

0

IndexOutOfBoundsException - 如果beginIndex是負數,或者endIndex大於此String對象的長度,或者beginIndex大於endIndex。

實際上,您的子字符串函數的右邊緣可能比左邊緣低。例如,當i=(size-1)j=size時,您將計算substring(size-1, 1)。這是你錯誤的原因。