我正在尝试调整我的数组,但我不断获得索引超出范围的异常

时间:2015-10-21 22:23:41

标签: java

我正在尝试用.txt文件创建一个字典。我认为这个问题出在我的addToDict方法中。我正在尝试调整数组的大小,因为我正在从未知大小的文本文件中读取但我只能使用数组。当我打印数组时,我得到一个超出范围的异常。我不知道什么是错的,我现在已经在这个项目上工作了好几天。我在addToDict方法中的else语句也遇到了问题。它也是超出范围的例外

import java.io.*;
import java.util.Scanner;
import java.util.regex.*;

public class BuildDict {
    static String dict[] = new String[20];
    static int index = 0;

    public static void main(String args[]) {
        readIn();
    }

    public static void readIn() {
        File inFile = new File("alice.txt");
        try {
            Scanner scan = new Scanner(inFile);
            while (scan.hasNext()) {
                String word = scan.next();
                if (!Character.isUpperCase(word.charAt(0))) {
                    checkRegex(word);
                }
            }
            scan.close();
        } catch (IOException e) {
            System.out.println("Error");
        }
    }

    public static void addToDict(String word) {

        if (index == dict.length) {

           String newAr[] = new String[index * 2];               
           for (int i = 0; i < index; i++) {
                newAr[i] = dict[i];
            }
            newAr[index] = word;
            index++;
            dict = newAr;
            for (int j = 0; j < index; j++) {
                System.out.println(newAr[j]);
            }
        } else {
            dict[index] = word;
            index++;
        }
    }

    public static void checkRegex(String word) {
        String regex = ("[^A-Za-z]");
        Pattern check = Pattern.compile(regex);
        Matcher regexMatcher = check.matcher(word);
        if (!regexMatcher.find()) {
            addToDict(word);
        }
    }
}

4 个答案:

答案 0 :(得分:2)

您尚未将新数组分配给dict

if (index == dict.length) {
    for (int i = 0; i < index; i++) {
        newAr[i] = dict[i];
    }
    newAr[index] = word;
    index++;
    for (int j = 0; j < index; j++) {
        System.out.println(newAr[j]);
    }

    // Assign dict to the new array.
    dict = newAr;
} else {
    dict[index] = word;
    index++;
}

答案 1 :(得分:0)

执行以下语句时,index的值为0。

String newAr[] = new String[index*2];

尝试重新审视您的逻辑。在调用此方法之前,index应该被赋予正值。这就是你获得OutOfBounds的原因。

编辑:你的意思是写index+2吗?

答案 2 :(得分:0)

你有

static int index = 0;

您需要根据您的文件更改此变量的值,否则您将始终在此行中出现错误

String newAr[] = new String[index*2];

答案 3 :(得分:0)

当您不知道阵列的大小时,不要使用数组使用arraylist。它会为你省去很多麻烦。我发现它们通常比普通数组更容易使用。

ArrayList<String> dict = new ArrayList<>();
dict.add(word);

//displaying values
for( int i = 0; i < dict.size(); i++ ){
    System.out.println(dict.get(i));
}