Исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException:Индекс строки вне диапазона:-60
-
21-12-2019 - |
Вопрос
Исключение в потоке «основной» 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.`
.