Целенаправленно избегать ArrayIndexOutOfBoundsException

string.split("\n")[1] всегда ставит ArrayIndexOutOfBoundsException. Есть ли способ предотвратить это? Существует ли реальный код, подобный приведенному ниже?

if (!ArrayIndexOutOfBoundsException)
    string.split("\n")[1]

ты ищешь String[] splitted = string.split("\n"); if (splitted.length > 1) { ... } ?

D. Kovács 13.07.2019 22:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
117
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

string.split("\n") возвращает массив String.
string.split("\n")[1] предполагает, что возвращаемое значение представляет собой массив, состоящий как минимум из двух элементов.
ArrayIndexOutOfBoundsException указывает, что массив имеет менее двух элементов.

Если вы хотите предотвратить получение этого исключения, вам нужно проверить длину массива. Что-то типа...

String[] parts = string.split("\n");
if (parts.length > 1) {
    System.out.println(parts[1]);
}
else {
    System.out.println("Less than 2 elements.");
}

Первый элемент массива имеет индекс 0. Не думайте, что всегда есть два элемента. Последний индекс в массиве имеет индекс (длина - 1).

Вы можете легко использовать Попробуйте поймать, чтобы избежать получения этого сообщения:

try{
     string.split("\n")[1];
}catch(ArrayIndexOutOfBoundsException e){
      //here for example you can 
      //print an error message
}

Индексация начинается с 0, поэтому, индексируя с 1, вы пытаетесь получить второй элемент массива, который в вашем случае является потенциальной второй строкой текста. У вас такая ошибка, потому что у вас может не быть разрыва строки в вашей строке, чтобы избежать такого исключения, вы можете либо использовать блок try catch (мне не нравится этот метод в вашем случае), либо просто проверить, есть ли разрыв строки в вашу строку, вы можете сделать это так:

if (yourString.contains("\n")){
    //split your string and do the work
}

или даже проверив длину частей из-за раскола:

String[] parts = yourString.split("\n");
if (parts.length>=2){
    //do the work
}

Если вы хотите использовать блок try-catch:

try {
    String thisPart = yourString.split("\n")[1];
}
catch(ArrayIndexOutOfBoundsException e) {
    //  Handle the ArrayIndexOutOfBoundsException case
}
//  continue your work

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