In: Computer Science
I just finished this program where the program reads a text file of full names , first and last name, and a zip code. It reads the items then stores the first name and last name and zipcodes as an objects and prints the items. However, when i use my text file i get this error
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 "
I notice this issue only happens when the names are formatted by tabs inbetween. For example:
"Firstname Lastname 90210" <-- this prints normally because there is only a space in between each value
"Firstname (tab) Lastname (tab) 90210" <--- Does not print because of the tab spaces but I need it to print in this fashion!
Please help me fix this annoying issue! Thank you!
Please remember the names are read from a txt file thats been pre-created. Not user inputted values.
import java.io.*;
class Details//stores the firstname, lastname and zip
{
String firstname, lastname, zip;
public Details(String a, String b, String
c)//constructor
{
firstname = a;lastname = b;zip
= c;
}
public String getFirstName()//getter methods
{
return firstname;
}
public String getLastName()
{
return lastname;
}
public String getZip()
{
return zip;
}
}
public class A {
public static void main(String[] args)
{
Details details[] = new
Details[25];int i=0;
BufferedReader reader;
try
{
reader
= new BufferedReader(new FileReader("myfile.txt"));//reader object
for file
String
line = reader.readLine();//read next line
while
(line != null) {
// read next line
String[] res = line.split(" ");//split the line according to spaces
and store it in res
details[i++] = new Details(res[0], res[1], res[2]);//create a
details object with the individual strings as parameters
line = reader.readLine();//read next line
}
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("FirstName
LastName ZIP");
for(int
j=0;j<i;j++)//display the contents of objects
{
System.out.println(details[j].getFirstName() + "\t " +
details[j].getLastName() + "\t " + details[j].getZip());
}
}
}
Please find the code below.
We just have to modify Line number 37 at split(" ") to split("\\s+) . It is a regex and it tells that More than one space will be used as a split condition.
SOURCE CODE:
*Please follow the comments to better understand the code.
**Please look at the Screenshot below and use this code to copy-paste.
***The code in the below screenshot is neatly indented for better understanding.
import java.io.*;
class Details//stores the firstname, lastname and zip
{
String firstname, lastname, zip;
public Details(String a, String b, String c)//constructor
{
firstname = a;lastname = b;zip = c;
}
public String getFirstName()//getter methods
{
return firstname;
}
public String getLastName()
{
return lastname;
}
public String getZip()
{
return zip;
}
}
public class A {
public static void main(String[] args)
{
Details details[] = new Details[25];int i=0;
BufferedReader reader;
try
{
reader = new BufferedReader(new FileReader("myfile.txt"));//reader object for file
String line = reader.readLine();//read next line
while (line != null) {
// read next line
String[] res = line.split("\\s+");//split the line according to one or more \\s+ regexspaces and store it in res
details[i++] = new Details(res[0], res[1], res[2]);//create a details object with the individual strings as parameters
line = reader.readLine();//read next line
}
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("FirstName LastName ZIP");
for(int j=0;j<i;j++)//display the contents of objects
{
System.out.println(details[j].getFirstName() + "\t " + details[j].getLastName() + "\t " + details[j].getZip());
}
}
}
============


SAMPLE OUTPUT:
File

OUTPUT:

