Исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException:Индекс строки вне диапазона:-60

StackOverflow https://stackoverflow.com//questions/21012521

Вопрос

Исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException:Индекс строки вне диапазона:-60

Я продолжаю получать эту ошибку, и я пытаюсь ее понять, но не могу!Я только начинаю Java, поэтому буду очень благодарен за любую помощь!Вот мой код:

//This method takes large amounts of text and formats
//them nicely in equal lenth lines for the console.

public void print(String a){

    String textLine = a;
    int x = 60; 
    List<String> splitText = new ArrayList<String>();

    //limits the amount of characters in a printed line to 60 + the next word.
    while (textLine.length() > 60) {

        if (textLine.substring(x+1,1) == " "){          
            splitText.add(textLine.substring(0,x+1));
            textLine = textLine.substring(x+2);
            x = 0;
        }           
        else {          
            x++;
        }
    }

    splitText.add(textLine);

    for (int y = 0; splitText.size() < y;y++){

        System.out.println(splitText.get(y));

    }

}
Это было полезно?

Решение

Проблема в том, что вы пытаетесь позвонить substring(beginIndex, endIndex) с параметрами:

beginIndex = x + 1 = 61
endIndex = 1

В соответствии с substring документы:

Возвращает новую строку, которая является подстрокой этой строки.Подстроение начинается в указанном начале и распространяется на символ в индексе Endidex - 1.Таким образом, длина подстроения является эндодекс-beginindex.

Это упадет в длину 1 - 61 = -60.Вот причина исключения:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -60 ...

Вот несколько примеров (из документации) использования этого метода:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

Редактировать:

Еще одна ошибка (спасибо @ichramm) находится в файле for-loop где вы распечатываете результаты.А конечное состояние должно быть y < splitText.size()

for (int y = 0; y < splitText.size(); y++) {
    ...
}

Другие советы

из-за метода подстроки.

public String substring(int beginIndex)
.

или

public String substring(int beginIndex, int endIndex)
. Параметры

: Вот деталь параметров:

beginIndex -- the begin index, inclusive .

endIndex -- the end index , exclusive.`
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top