首页 > 解决方案 > 尝试从字符串数组添加到列表时的 ArrayIndexOutOfBounds

问题描述

我有一个问题是阻止我的整个代码工作。它的数组索引越界错误,但它与文件数组完美匹配,所以我不确定问题是什么..

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。

标签: javaarrayslistfileindexoutofboundsexception

解决方案


此问题的根本原因是您正在尝试访问下一行中的数组。幕后实际发生的事情是您实际上尝试访问从该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));
}

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


推荐阅读