The problem is the '\n'
character that follows your integer. When you call nextInt
, the scanner reads the int
, but it does not consume the '\n'
character after it; nextLine
does that. That is why you get an empty line instead of the string that you were expecting to get.
Let's say your input has the following data:
12345
hello
Here is how the input buffer looks initially (^
represents the position at which the Scanner
reads the next piece of data):
1 2 3 4 5 \n h e l l o \n
^
After nextInt
, the buffer looks like this:
1 2 3 4 5 \n h e l l o \n
^
The first nextLine
consumes the \n
, leaving your buffer like this:
1 2 3 4 5 \n h e l l o \n
^
Now the nextLine
call will produce the expected result. Therefore, to fix your program, all you need is to add another call to nextLine
after nextInt
, and discard its result:
k = in.nextInt();
in.nextLine(); // Discard '\n'
input = in.nextLine();