RELENTLESS00G
RELENTLESS00G

Reputation: 35

Splitting and saving data in Java

I'm trying to read a data file and save the different variables into an array list.

The format of the data file looks a little like this like this

5003639MATH131410591
5003639CHEM434111644
5003639PSYC230110701

Working around the bad formatting of the data file, I added commas to the different sections to make a split work. The new text file created looks something like this

5,003639,MATH,1314,10591
5,003639,CHEM,4341,11644
5,003639,PSYC,2301,10701

After creating said file, I tried to save the information into an array list. The following is the snippet of trying to do this.

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));

The following is the structure it is trying to save into

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;
        }
    }

At the end I wanted to print out one of the variables to see that it's working but it gives me an IndexOutOfBoundsException. I wanted to know if I'm maybe saving the info incorrectly, or am I perhaps trying to get it to print out incorrectly?

Upvotes: 0

Views: 647

Answers (2)

David Newcomb
David Newcomb

Reputation: 10943

If you expect your data to have a comma or a space separating the characters then you would alter the split line to be:

String[] splitOut = strLine.split("[, ]");

The split takes a regular expression as an argument.

Rather than artificially adding commas I would look at String.substring in order to cut the line you have read into pieces. For example:

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

[ Untested: my numbers might be out because I a bit knacked, but you get the idea ]

Upvotes: 0

Ryan J
Ryan J

Reputation: 8323

You have a space in your split delimiter specification, but no spaces in your data.

String[] splitOut = strLine.split(", ");  // <-- notice the space?

This will result in a splitOut array of only length 1, not 5 like you expect. Since you only add to the list when you see a length of 5, checking the list for the 0th element at the end will result in checking for the first element of an empty list, hence your exception.

Upvotes: 5

Related Questions