2017-04-13 1 views
0

lang.StringIndexOutOfBoundsException - 다음 코드의 경우.Java 문자열 색인이 범위를 벗어남 : -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); 

인덱스 i에서 문자열을 요청한다 (4) index length-i 내지 (3) 남아있는 전 길이의 문자열.

-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

관련 문제