我正在尝试用.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);
}
}
}
答案 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));
}