2017-04-13 15 views
0

lang.StringIndexOutOfBoundsExceptionが発生します。Java文字列インデックスが範囲外です。-1次のコードの場合は、-1

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); 

は、残りの長さのindex length-i(3)ではなく、文字列へのインデックスi(4)から文字列を求めています。

-iを取り出します。

0

あなたが書いた:

をこれは私が取得していますエラー・スタックで有効な英単語

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"); 
} 

}

の辞書に一致する単語を抽出するためにスペースを入れずに文章のためのプログラムをチェック

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

関連する問題