Course – LS – All
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Introduction

In Java, the Scanner class is commonly used to read input from various sources, including the console. However, Scanner can leave newline characters in the buffer, causing issues with subsequent input reads. Therefore, clearing the Scanner buffer ensures consistent and predictable input processing.

In this tutorial, we’ll dive into different Java methods for clearing the Scanner buffer.

2. Using nextLine() With hasNextLine() Methods

One straightforward buffer-clearing approach involves the nextLine() and hasNextLine() methods. Let’s take a simple example:

Scanner scanner = new Scanner("123\nHello World.");

@Test
public void givenInput_whenUsingNextLineWithHasNextLine_thenBufferCleared() {

    int number = scanner.nextInt();
    if (scanner.hasNextLine()) {
        scanner.nextLine();
    }
    String text = scanner.nextLine();

    assertEquals(123, number);
    assertEquals("Hello World", text);
}

Here, we simulate user input by creating a Scanner object with the string “123\nHello World”. Afterward, we use the scanner.nextInt() method to read an integer, which leaves the newline character in the buffer. We then check for any remaining input in the buffer with the scanner.hasNextLine() method and clear it by calling scanner.nextLine().

After clearing the buffer, we read a string input with the scanner.nextLine() method, which now correctly reads “Hello World”. Finally, we use assertEquals to verify that the integer read is 123 and the string read is “Hello World.”.

3. Using skip() Method

Another method to clear the buffer is using a scanner.skip(“\n”) method that skips over any newline character left in the buffer. Let’s see how it works with a simple implementation:

@Test
public void givenInput_whenUsingSkip_thenBufferCleared() {
    int number = scanner.nextInt();
    scanner.skip("\n");
    String text = scanner.nextLine();

    assertEquals(123, number);
    assertEquals("Hello World", text);
}

In this example, after reading the integer using the nextInt() method, we use the skip(“\n”) method to skip over the newline character left in the buffer. This clears the buffer, allowing the subsequent nextLine() method to correctly read “Hello World“.

4. Conclusion

In conclusion, managing the Scanner buffer is crucial for consistent and accurate input handling in Java applications. In this tutorial, we’ve explored clearing the Scanner buffer using nextLine() with hasNextLine().

As always, the complete code samples for this article can be found over on GitHub.

Course – LS – All
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

res – REST with Spring (eBook) (everywhere)
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments