Почему я получаю ArrayIndexOutOfBoundsException? - PullRequest
2 голосов
/ 31 января 2012

Я читаю файл и добавляю его в список, затем читаю список, разделяю строки, сравниваю и что-то с ним делаю. я получаю это исключение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

Где я должен исправить свой код?

for (Productname m : listIP) {
        if (m.getIdentifier() == null || m.getProductname() == null) {
                addToNonSimilarList( m.getProductname());
        } else {
            String id = m.getIdentifier().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase();
            String product = m.getProductname().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase();
            id = id.replaceAll("\\s+", " ");
            product = product.replaceAll("\\s+", " ");
            if (!id.equalsIgnoreCase(product)) {
                if (id.contains(" X ") && product.contains(" X ")) {
                    String[] ide = id.split(" (?=X\\s*\\d+)");
                    String[] prod = product.split(" (?=X\\s*\\d+)");
                    System.out.println(m.getMnemonic());
                    if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {
                        String[] i = ide[0].split(" (?=\\d+)");
                        String[] p = prod[0].split(" (?=\\d+)");
                        if (i[0].trim().equalsIgnoreCase(p[0].trim())) {
                            //do nothing
                        } else {
                            addToNonSimilarList( m.getProductname());
                        }
                    } else {
                        addToNonSimilarList( m.getProductname());
                    }
                } else {
                    addToNonSimilarList( m.getProductname());

                }
            }
        }

    }

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Ну, это состояние выглядит хитрым:

if (ide.length > 0 && prod.length > 0 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {

Вы проверяете, есть ли хотя бы один элемент в каждом, но вы используете второй элемент в каждом.

Трудно сказать, чего вы пытаетесь достичь, но я подозреваю, что вы либо хотите изменить условия length, либо индексы массива. Я также разделил бы этот метод на более короткие и, возможно, для ясности создал бы статические переменные с именами со ссылками на Pattern объекты, для ясности ...

РЕДАКТИРОВАТЬ: Если вы действительно хотите использовать второй элемент из каждого массива, я бы предложил:

if (ide.length > 1 && prod.length > 1 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) {
1 голос
/ 31 января 2012
 if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim()))

если длина равна единице, то ide [0] и prod [0] могут получить доступ к первому элементу, однако вы используете ide [1] и prod [1] соответственно. Вот откуда появляется ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...