Индекс строки Java вне диапазона: -1

lang.StringIndexOutOfBoundsException для следующего кода. Программа проверяет предложения без пробелов, чтобы извлечь слова, соответствующие словарю правильных английских слов.

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)

2 ответа

Решение

Подстрока принимает начальный и конечный индексы, а не длину. Линия:

str.substring(i,length-i); 

просит строку из индекса i (4) для index length-i (3), а не строка оставшейся длины.

Выньте -i.

Вы написали:

str.substring(i,length-i);

i увеличение и в один момент i будет>= length - i,

Другие вопросы по тегам