1+ package clearscannerbuffer ;
2+
3+
4+ import org .junit .Test ;
5+
6+ import java .io .ByteArrayInputStream ;
7+ import java .util .Scanner ;
8+ import java .util .stream .Collectors ;
9+ import java .util .stream .Stream ;
10+
11+ import static org .junit .Assert .assertEquals ;
12+
13+ public class ClearScannerBufferUnitTest {
14+ Scanner scanner = new Scanner ("123\n Hello World" );
15+
16+ @ Test
17+ public void givenInput_whenUsingNextLineWithHasNextLine_thenBufferCleared () {
18+
19+ int number = scanner .nextInt ();
20+ if (scanner .hasNextLine ()) {
21+ scanner .nextLine ();
22+ }
23+ String text = scanner .nextLine ();
24+
25+ assertEquals (123 , number );
26+ assertEquals ("Hello World" , text );
27+ }
28+
29+ @ Test
30+ public void givenInput_whenUsingReset_thenBufferCleared () {
31+ String input = "123\n Hello World" ;
32+ ByteArrayInputStream inputStream = new ByteArrayInputStream (input .getBytes ());
33+ Scanner scanner = new Scanner (inputStream );
34+
35+ int number = scanner .nextInt ();
36+
37+ inputStream .reset ();
38+ scanner = new Scanner (inputStream );
39+
40+ int newNumber = scanner .nextInt ();
41+
42+ scanner .nextLine ();
43+
44+ String text = scanner .nextLine ();
45+
46+ assertEquals (123 , number );
47+ assertEquals (123 , newNumber );
48+ assertEquals ("Hello World" , text );
49+ }
50+
51+ @ Test
52+ public void givenInput_whenUsingStreamAPI_thenBufferCleared () {
53+ Scanner scanner = new Scanner ("123\n line1\n line2\n exit" );
54+
55+ int number = scanner .nextInt ();
56+
57+ scanner .nextLine ();
58+
59+ String lines = Stream .generate (scanner ::nextLine )
60+ .takeWhile (line -> !line .equalsIgnoreCase ("exit" ))
61+ .collect (Collectors .joining (System .lineSeparator ()));
62+
63+ String expectedLines = "line1" + System .lineSeparator () + "line2" ;
64+
65+ assertEquals (123 , number );
66+ assertEquals (expectedLines , lines );
67+ }
68+ }
0 commit comments