在Java中拆分和保存数据

时间:2014-12-10 02:41:25

标签: java

我正在尝试读取数据文件并将不同的变量保存到数组列表中。

数据文件的格式看起来像这样

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。我想知道我是否可能错误地保存了信息,或者我是不是想让它打印错误?

2 个答案:

答案 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)));
}

[未经测试:我的数字可能因为我有点诀窍,但你得到了这个想法]