我正在尝试读取数据文件并将不同的变量保存到数组列表中。
数据文件的格式看起来像这样
5003639MATH131410591
5003639CHEM434111644
5003639PSYC230110701
解决数据文件的错误格式问题,我在不同的部分添加了逗号以进行拆分工作。创建的新文本文件看起来像这样
5,003639,MATH,1314,10591
5,003639,CHEM,4341,11644
5,003639,PSYC,2301,10701
创建所述文件后,我尝试将信息保存到数组列表中。 以下是尝试这样做的片段。
FileReader reader3 = new FileReader("example.txt");
BufferedReader br3 = new BufferedReader(reader3);
while ((strLine = br3.readLine())!=null){
String[] splitOut = strLine.split(", ");
if (splitOut.length == 5)
list.add(new Class(splitOut[0], splitOut[1], splitOut[2], splitOut[3], splitOut[4]));
}
br3.close();
System.out.println(list.get(0));
以下是它试图保存到
的结构public static class Class{
public final String recordCode;
public final String institutionCode;
public final String subject;
public final String courseNum;
public final String sectionNum;
public Class(String rc, String ic, String sub, String cn, String sn){
recordCode = rc;
institutionCode = ic;
subject = sub;
courseNum = cn;
sectionNum = sn;
}
}
最后我想打印出其中一个变量,看它是否有效,但它给了我一个IndexOutOfBoundsException
。我想知道我是否可能错误地保存了信息,或者我是不是想让它打印错误?
答案 0 :(得分:5)
您的拆分分隔符规范中有空格,但数据中没有空格。
String[] splitOut = strLine.split(", "); // <-- notice the space?
这将导致splitOut
数组的长度仅为1,而不是您期望的5。
由于您只在看到长度为5时才添加到列表中,因此在末尾检查第0个元素的列表将导致检查空列表的第一个元素,从而导致例外。
答案 1 :(得分:0)
如果您希望数据有逗号或空格分隔字符,那么您可以将分割线更改为:
String[] splitOut = strLine.split("[, ]");
split
将正则表达式作为参数。
我不会人为地添加逗号,而是会查看String.substring
以便将您已读过的行剪成碎片。例如:
while ((strLine = br3.readLine())!=null) {
if (strLine.length() != 20)
throw new BadLineException("line length is not valid");
list.add(new Class(strLine.substring(0,1), strLine.substring(1,7), strLine.substring(7,11), strLine.substring(11,15), strLine.substring(15,19)));
}
[未经测试:我的数字可能因为我有点诀窍,但你得到了这个想法]