Voyex
Voyex

Reputation: 33

Why am I getting an InputMismatchException with?

I created a Scanner in java to read through a file of data regarding a city. The file is formatted as such:

Abbotsford,2310,2
Adams,1967,1
Algoma,3167,2

When reading through the file, I get an InputMismatchException when scanning the last item on each line (This item needs to be an int).

public void fileScanner(File toScan) throws FileNotFoundException {
            Scanner sc = new Scanner(toScan);
            sc.useDelimiter(",");
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());

Any ideas as to why? I'd imagine it has something to do with my use of the "," delimiter.

Upvotes: 2

Views: 69

Answers (2)

backdoor
backdoor

Reputation: 901

You are using only one delimiter i.e. , but your file contains \r or \n so try to use multiple delimiters. Also, use a loop to read the entire file:-

Scanner sc = new Scanner(toScan);
        sc.useDelimiter(",|\\r\\n");
        while (sc.hasNext()) {
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());
        }

OUTPUT:-

Abbotsford
2310
2

Adams
1967
1

Algoma
3167
2

Upvotes: 3

The delimiter you're using is comma(,) The system looks for the next comma, which comes only after Adams. So the input for the system looks like 2 Adams which is obviously not an Int , rather a String and hence the inputMisMatch.

If you make your data something like below, your code would work great.

Abbotsford,2310,2,
Adams,1967,1,
Algoma,3167,2,

Also I see there's no loop to read all the data. Your code will read just the first line.

Upvotes: 1

Related Questions