java - 尝试从字符串数组添加到列表时的 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。
解决方案
此问题的根本原因是您正在尝试访问下一行中的数组。幕后实际发生的事情是您实际上尝试访问从该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));
}
希望这个答案能帮助您解决问题...
推荐阅读
- yii2 - 如何使用yii2通过图像链接渲染另一个控制器方法?
- c++ - 堆栈溢出会导致分段错误以外的其他原因吗?
- xcode - 没有这样的模块“CreateMLUI”
- python - 使用 pytest --collect-only 仅返回单个测试名称
- java - Java calendar.month 返回星期日的月份
- javascript - 使用 React-Native 将图像上传到 Firebase
- php - 从其他数组php替换数组中的键
- css - CSS :hover 影响所有列表项
- javascript - 如何获取 if/else 语句的当前 url
- php - phpWord表格无边框