2017-04-13 61 views
0

lang.StringIndexOutOfBoundsException爲下面的代碼。該程序將檢查句子沒有空格以提取匹配的有效英文單詞Java字符串索引超出範圍:-1

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

class WordCheckUtil{ 

boolean dictionaryContains(String word) 
{ 
    List<String> dictionary = new ArrayList<String>(Arrays.asList("mobile","samsung","sam","sung", 
          "man","mango", "icecream","and", 
          "go","i","love","ice","cream")); 

     if(dictionary.contains(word)) 
      return true; 

    return false; 
} 

void wordCheck(String str){ 
    wordBreakCheck(str,str.length(),""); 
} 

void wordBreakCheck(String str, int length, String result){ 
    System.out.println(str+" "+length+" "+result); 
    for (int i = 1; i <= length; i++) { 
     String prefix = str.substring(0, i); 
     System.out.println(prefix); 
     if(dictionaryContains(prefix)){ 

      if(i == length){ 
       result += prefix; 
       System.out.println("--> "+result); 
       return; 
      } 
      System.out.println(i+" -- "+length); 
      String subStr = str.substring(i,length-i); 
      wordBreakCheck(subStr,length-i,result+prefix+" "); 
     } 
    } 
} 

public static void main(String[] args) { 
    WordCheckUtil wr = new WordCheckUtil(); 
    wr.wordCheck("iloveice"); 
} 

}

的字典單詞這是錯誤堆棧我得到:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String 
index out of range: -1 
    at java.lang.String.substring(String.java:1967) 
    at WordCheckUtil.wordBreakCheck(WrodCheckUtil.java:36) 
    at WordCheckUtil.wordBreakCheck(WrodCheckUtil.java:37) 
    at WordCheckUtil.wordCheck(WrodCheckUtil.java:20) 
    at WordCheckUtil.main(WrodCheckUtil.java:44) 
+1

明顯的問題:哪一行是'WrodCheckUtil.java:36'? –

+0

學習使用調試器的時間 - 做到這一點,問題就會變得很明顯。 –

+0

我檢查了調試器,在引發這個錯誤之前,「i」和「length」的值是4和7 – shailbenq

回答

1

子串需要啓動和結束索引,而不是長度。行:

str.substring(i,length-i); 

是要求從索引i字符串(4)index length-i(3),而不是一個剩餘長度的字符串。

取出-i。

0

您寫道:

str.substring(i,length-i); 

i增加和在一個時刻i將> = length - i

+0

我檢查了這一行,在引發這個錯誤之前,「i」和「length」的值是4和7分別爲 – shailbenq

+0

所以你可以調用'str.substring(4,7-4)'。開始索引= 4,結束索引= 3。範圍= -1。 –

+0

是的範圍是-1這裏。 – shailbenq

相關問題