【发布时间】:2021-04-04 02:01:28
【问题描述】:
我必须将文件读入 arraylist,然后从 arrlist 中逐行读取,以便分隔命令(i 表示插入)和键(要插入的数字)。因为我正在建立一个跳过列表。我的文件由:
我 2173
我 2307
我 2405
我 1512
我 1783
我 60
编辑:&是的,每个插入命令旁边都有一个数字。
问题是我的程序突然超出以下行:
int key = Integer.parseInt(字母[1]);
为什么会发生这种情况?它以前成功地工作,但突然超出了界限,当我进行打印测试时,它也在文件行之间跳过了 1 行。 代码如下。谢谢。
错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:索引 1 在 SkipList.main(SkipList.java:103) 处超出长度 1 的范围
import java.io.*;
import java.util.*;
import java.lang.StringBuild
public class SkipList{
public static void main(String[] args) throws IOException{
String line;
File file = new File("src/in10.txt");
Scanner in = new Scanner(file);
//Copying File content
ArrayList<String> arrList = new ArrayList<>();
// Populates array list with text file content
while(in.hasNextLine()) {
arrList.add(in.nextLine());
}
for ( int i = 0; i < arrList.size(); i++){
line = arrList.get(i);
// System.out.println(line);
//Splits Line with space delimiter into String Array
String[] letter = line.split(" ");
String command = letter[0];
int key = Integer.parseInt(letter[1]); //ERROR occurs here?
}
}
}
【问题讨论】:
-
为什么会发生这种情况? - 您的数据不是您期望的格式。通过显示每一行文本(在进行拆分之前)进行一些基本调试,然后显示数组长度以验证拆分处理。
-
我的建议是打印出
letter.length和letter的每个元素;也可能是line。也许该行是空的?无论如何,查看实际值可能会有所启发。 -
你确定每一行都有一个命令和一个键吗?也许您不应该盲目访问
letter[1],直到您确定letter[0]是一个需要附带键的命令。 -
您的数据文件中也很可能有一些垃圾非打印字符。运行调试器或至少添加一个 println 并将输入行转储到控制台会告诉你发生了什么。