Во-первых, о конкретном c исключении: https://www.geeksforgeeks.org/understanding-array-indexoutofbounds-exception-in-java/
Обычно выдается IndexOutOfBoundsException
, если к массиву (или String
) обращаются таким образом Таким образом, индекс аргумента находится за пределами диапазона индекса массива.
В вашем случае выдается исключение, потому что выполняемое вами разбиение строки, вероятно, не возвращает значение в массиве с индексом 0, которое является таким длинным как prefix.length()
. Или другими словами: что произойдет, если сообщение, возвращаемое getMessage
, будет меньше длины вашего префикса?
Практический пример:
// assume this input:
String prefix = "Hello";
String messageContentDisplay = "Hello Jack";
// your code does:
String[] segments = messageContentDisplay.split(" ");
String prefixInMessage = segments[0];
String subMessage = prefixInMessage.substring(prefix.length()); // This makes no sense.
Я верю в то, что вы на самом деле хотите это вырезать префикс, который будет работать так:
String displayContent = event.getMessage().getContentDisplay();
String[] segments = displayContent.split(" ");
if (segments.length > 1) {
Command c = commands.get(displayContent.substring(segments[0].length));
}