[BAEL-6363_nextInt-vs-nextLine] Integer.parseInt(scanner.nextLine()) vs scanner.nextInt() in Java (#13858)
This commit is contained in:
parent
fbc3b5920b
commit
d19a53c2d3
|
@ -0,0 +1,85 @@
|
||||||
|
package com.baeldung.scanner;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
import java.util.InputMismatchException;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class NextLineVsNextIntUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenInputLineIsNumber_thenNextLineAndNextIntBothWork() {
|
||||||
|
String input = "42\n";
|
||||||
|
|
||||||
|
//nextLine()
|
||||||
|
Scanner sc1 = new Scanner(input);
|
||||||
|
int num1 = Integer.parseInt(sc1.nextLine());
|
||||||
|
assertEquals(42, num1);
|
||||||
|
|
||||||
|
//nextInt()
|
||||||
|
Scanner sc2 = new Scanner(input);
|
||||||
|
int num2 = sc2.nextInt();
|
||||||
|
assertEquals(42, num2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenInputIsNotValidNumber_thenNextLineAndNextIntThrowDifferentException() {
|
||||||
|
String input = "Nan\n";
|
||||||
|
|
||||||
|
//nextLine() -> NumberFormatException
|
||||||
|
Scanner sc1 = new Scanner(input);
|
||||||
|
assertThrows(NumberFormatException.class, () -> Integer.parseInt(sc1.nextLine()));
|
||||||
|
|
||||||
|
//nextInt() -> InputMismatchException
|
||||||
|
Scanner sc2 = new Scanner(input);
|
||||||
|
assertThrows(InputMismatchException.class, sc2::nextInt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUsingNextInt_thenTheNextTokenAfterItFailsToParseIsNotConsumed() {
|
||||||
|
String input = "42 is a magic number\n";
|
||||||
|
|
||||||
|
//nextInt() to read '42'
|
||||||
|
Scanner sc2 = new Scanner(input);
|
||||||
|
int num2 = sc2.nextInt();
|
||||||
|
assertEquals(42, num2);
|
||||||
|
|
||||||
|
// call nextInt() again on "is"
|
||||||
|
assertThrows(InputMismatchException.class, sc2::nextInt);
|
||||||
|
|
||||||
|
String theNextToken = sc2.next();
|
||||||
|
assertEquals("is", theNextToken);
|
||||||
|
|
||||||
|
theNextToken = sc2.next();
|
||||||
|
assertEquals("a", theNextToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenReadingTwoInputLines_thenNextLineAndNextIntBehaveDifferently() {
|
||||||
|
|
||||||
|
String input = new StringBuilder().append("42\n")
|
||||||
|
.append("It is a magic number.\n")
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
//nextLine()
|
||||||
|
Scanner sc1 = new Scanner(input);
|
||||||
|
int num1 = Integer.parseInt(sc1.nextLine());
|
||||||
|
String nextLineText1 = sc1.nextLine();
|
||||||
|
assertEquals(42, num1);
|
||||||
|
assertEquals("It is a magic number.", nextLineText1);
|
||||||
|
|
||||||
|
//nextInt()
|
||||||
|
Scanner sc2 = new Scanner(input);
|
||||||
|
int num2 = sc2.nextInt();
|
||||||
|
assertEquals(42, num2);
|
||||||
|
|
||||||
|
// nextInt() leaves the newline character (\n) behind
|
||||||
|
String nextLineText2 = sc2.nextLine();
|
||||||
|
assertEquals("", nextLineText2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue