Daisy Henderson
Daisy Henderson

Reputation: 21

Number format issue, newbie project

I am trying to write a program that loads a movie data base file, and then splits up that information into the movie title, year, and all of the associated actors. I split up all of the info, but I am having issues converting the year, which is in a string, to an int. The format of the year string is (****) with the * being a year, such as 1999. When I try to use parse I get a number format exception. I have tried replacing the parentheses, but it just gave me more errors! Any ideas?

public class MovieDatabase {

ArrayList<Movie> allMovie = new ArrayList<Movie>();

//Loading the text file and breaking it apart into sections
public void loadDataFromFile( String aFileName) throws FileNotFoundException{
    Scanner theScanner = new Scanner(aFileName);
    theScanner = new Scanner(new FileInputStream("cast-mpaa.txt"));

    while(theScanner.hasNextLine()){
        String line = theScanner.nextLine();
        String[] splitting = line.split("/" );
        String movieTitleAndYear = splitting[0];
        int movieYearIndex = movieTitleAndYear.indexOf("(");
        String movieYear = movieTitleAndYear.substring(movieYearIndex);
        System.out.println(movieYear);
        //this is where I have issues
        int theYear = Integer.parseInt(movieYear);
        String movieTitle = movieTitleAndYear.substring(0, movieYearIndex);
        ArrayList<Actor> allActors = new ArrayList<Actor>();
        for ( int i = 1; i < splitting.length; i++){
            String[] names = splitting[i].split(",");
            String firstName = names[0];
            Actor theActor = new Actor(firstName);
            ArrayList<Actor> allActor = new ArrayList<Actor>();
            allActor.add(theActor);
        }

        Movie theMovie = new Movie(movieTitle, theYear, allActors);
        allMovie.add(theMovie);

    }       
    theScanner.close();
}

output:

(1967)

Here is the errors I am getting:

Exception in thread "main" java.lang.NumberFormatException: For input string: "(1967)"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:527)
at MovieDatabase.loadDataFromFile(MovieDatabase.java:27)

Upvotes: 2

Views: 104

Answers (3)

Mureinik
Mureinik

Reputation: 312319

Your substring call currently gets a year enclosed by brackets, e.g., (1967). You can avoid this by calling the substring variant that accepts an endIndex, and just get the year's four digits:

String movieYear = 
    movieTitleAndYear.substring(movieYearIndex + 1, // to get rid of "("
                                movieYearIndex + 5 // to get rid of ")" 
                               );

Upvotes: 0

Praneel Gavali
Praneel Gavali

Reputation: 76

You need to add indexof for ")". Code snippet:

int movieYearOpenBracesIndex = movieTitleAndYear.indexOf("(");
int movieYearCloseBracesIndex = movieTitleAndYear.indexOf(")");
String movieYear = movieTitleAndYear.substring(movieYearOpenBracesIndex + 1, movieYearCloseBracesIndex);
System.out.println(movieYear);

This will give the exact year. e.g. 1967

Upvotes: 0

SMA
SMA

Reputation: 37103

You have brackets around the numbers. You could either correct your file or you could remove brackets using:

String str = "(1967)";
System.out.println(str.substring(1, str.length()-1));
Output:
1967

In your code, you used:

int movieYearIndex = movieTitleAndYear.indexOf("(");
String movieYear = movieTitleAndYear.substring(movieYearIndex);

So if my movieTitleAndYear string is "hi (1947)", indexOf will give me index of "(" as 3 and substring will start reading string from index 3 which includes "(". One way you could avoid opening bracket is to change your substring line to:

String movieYear = movieTitleAndYear.substring(movieYearIndex + 1);//but still you have closing bracket.

If you are sure it's always going to be of four digit, then you could do something like:

String movieYear = movieTitleAndYear.substring(movieYearIndex + 1, movieYearIndex  + 5);

Upvotes: 1

Related Questions