java.lang.ArrayIndexOutOfBoundsException: 4 - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю над извлечением значений из текстового файла, разделенного табуляцией, в список в groovy.Но я сталкиваюсь с ArrayIndexOutOfBoundsException.

Код

println("Reading File Contents")

def fullArray = new String[31721][4]
def availableArray = new String[1386][2]
def filteredFullArray = new String[1386][5]

String fileContents = new File('beliefs.txt').text
String availableContents = new File('available.txt').text

def count = 0

fileContents.eachLine { line ->

    String[] str
    str = line.split('\t')

    def subCount = 0
    for (subCount; subCount < str.length; subCount++) {
         fullArray[count][subCount] = str[subCount]
    }
    count++
}

faiths.txt

1   Azerbaijan  hasOfficialLanguage Azerbaijani_language
2   Augustus    hasChild    Julia_the_Elder
3   Arthur_Aikin    isCitizenOf England
4   Arthur_Aikin    diedIn  London
5   Alexander_III_of_Russia isMarriedTo Maria_Feodorovna__Dagmar_of_Denmark_
6   Alexander_III_of_Russia hasChild    Nicholas_II_of_Russia
7   Alexander_III_of_Russia hasChild    Grand_Duke_Michael_Alexandrovich_of_Russia
8   Alexander_III_of_Russia hasChild    Grand_Duchess_Olga_Alexandrovna_of_Russia
9   Alexander_III_of_Russia hasChild    Grand_Duke_Alexander_Alexandrovich_of_Russia
10  Alexander_III_of_Russia hasChild    Grand_Duke_George_Alexandrovich_of_Russia
...
...
...
31719   Minqi_Li    isKnownFor  Chinese_New_Left
31720   Henry_Bates_Grubb   isKnownFor  Mount_Hope_Estate
31721   Thomas_Kuhn isKnownFor  Paradigm_shift  

При выполнении этого я получаю следующую ошибку.

Выловлено: java.lang.ArrayIndexOutOfBoundsException: 4 java.lang.ArrayIndexOutOfBoundsException: 4 в extractBeliefs $ _run_closure1.doCall (extractBeliefs.groovy: 19) в extractBeliefs.run (extractBelief 12).

Мне известна причина, по которой может возникнуть вышеуказанная ошибка.Но так как мой массив не превышает последний индекс и поскольку показано, что ошибка находится в строке fileContents.eachLine { line ->, я не могу найти, где это происходит неправильно.

Любые предложения на этот счет будут весьмаоценили.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Лучшим способом было бы заменить все мультипространства или вкладки сначала одним пробелом, а затем разделить их на один пробел.

line = line.replace("\\s+/g", " ")
str = line.split('\\s+')
0 голосов
/ 07 декабря 2018

Ваша первоначальная ошибка исходит из этой строки (19):

fullArray[count][subCount] = str[subCount]

Строка 12 просто поднимает исключение при выходе из замыкания.Это определенно означает, что у вас есть дополнительная вкладка в одной строке ... для целей отладки попробуйте распечатать строку на консоли, прежде чем пытаться загрузить ее в массив.Это поможет вам определить, какая строка содержит ошибку.

0 голосов
/ 06 декабря 2018

Попробуйте разделить пробелом

str = line.split('\s+')

вместо

str = line.split('\t')
...