尝试从字符串数组添加到列表时的ArrayIndexOutOfBounds

时间:2018-10-08 03:51:10

标签: java arrays list file indexoutofboundsexception

我遇到了一个问题,导致我的整个代码无法正常工作。它具有数组索引超出范围的错误,但它与文件数组完全匹配,所以我不确定是什么问题。

public void Menu() {
    prompt.welcomeMsg();
    prompt.nGramOptionMsg();
    String userInput = input.next();
    while (userInput.charAt(0) != 's' || userInput.charAt(0) != 'S') {
        if (userInput.charAt(0) == 'n' || userInput.charAt(0) == 'N') {
            prompt.nGramLengthMsg();
            int userIntut = input.nextInt();
            nGram = new NGram(userIntut);
            prompt.fileUpload();
            String userFilePut = input.next();
            FileOpener file = new FileOpener(userFilePut);
            String[] fileArray = file.openFile();
            for (int i = 0; i < fileArray.length; i++) {
                String[] splitedFileArray = fileArray[i].split("\\s+");
                list.add(splitedFileArray[i]);
            }
            String[] listToStringArray = (String[]) list.toArray(new String[0]);
            String[] nGrams = nGram.arrayToNGram(fileArray);
            for (int i = 0; i < nGrams.length; i++) {
                Word word;
                if (!hashMap.containsKey(nGrams[i])) {
                    word = new Word(nGrams[i], 1);
                    hashMap.put(word.getNGram(), word);
                } else {
                    Word tempWord = hashMap.remove(nGrams[i]);
                    tempWord.increaseAbsoluteFrequency();
                    hashMap.put(tempWord.getNGram(), tempWord);
                }

            }

            HashMapFiller fill = new HashMapFiller();
            fill.hashMap(hashMap);
            fill.print();

            prompt.goAgain();
        }

}

当list.add试图添加splitedFileArray时出现问题。我尝试做fileArray.length-1,但是除了-1以外,它也有类似的错误。

1 个答案:

答案 0 :(得分:0)

此问题的根本原因是您尝试在下一行访问阵列。实际发生在幕后的是,您实际上尝试访问从split()方法返回的未知大小的数组。返回的数组大小可能小于定义的索引(在您的情况下为i)。

list.add(splitedFileArray[i]);

您可以按以下方法解决此问题。

for (int i = 0; i < fileArray.length; i++) {
    String[] splitedFileArray = fileArray[i].split("\\s+");
    list.addAll(Arrays.asList(splitedFileArray));
}

希望这个答案将帮助您解决问题...