Integer.parseInt(scanner.nextLine()) vs scanner.nextInt()
There are 2 observations :
- Using
myScannerInstance.nextInt()
leaves behind a new line character. So, if you callnextLine()
afternextInt()
, thenextLine()
will read the new line character instead of the actual data. Consequently, you will have to add anothernextLine()
after thenextInt()
to gobble up that dangling new-line character.nextLine()
doesn't leave behind a new line character.
code :
int age=myScannerInstance.nextInt();
String name = myScannerInstance.nextLine();// here the actual name will not be read. The new line character will be read.
nextInt()
will again go back to the underlying stream and read. IO calls take time (expensive). It will do lot of checks to get the next integer.nextLine()
will do those checks only once. So, if you callnextLine()
once and read 5 integers (as a single line String), split them and parse them as integers (usingInteger.parseInt()
), it will be faster and more efficient than reading each int individually.
Using nextLine()
+ parseInt()
will give you enormous performance benefit when you are running a very large loop.
Usage :
Using nextInt()
gives you an additional advantage wherein you will get an exception if the input text is not an integer. example 123
is accepted.. 123sdsa
will throw an InputMismatchException
. So, you can catch it and handle it appropriately.
Using nextLine()
will read the entire line, so, it will read the entire String sada1231
and then fail with NumberFormatException
if it cannot parse the String as a number. You will have to handle that exception.
Generally, one nextLine()
/ nextInt()
call won't make much of a difference. If you have a loop or if you are reading lot of data, then using readLine()
with parseInt()
will be very efficient.