How to use scanner in Java
Scanner class in Java is the part of java.util package. Java programming language has various ways to read input from the user, Scanner class is one of the classes to take the input. It is considered as the easiest way to read input in Java. Although it is not very efficient, it is feasible to use in the scenarios where time is the constraint.
The Scanner class break the input in tokens using delimiter, and it is whitespace by default. It has various methods to read and parse the primitive inputs.
It is used to parse text for the primitive types and string with the help of regular expression. It can obtain input of the primitive types such as int, float, double, byte, short, etc.
Steps to use the Java Scanner class
1. First, import the Scanner class as,
import java.util.Scanner;
2. After that, create an object of the Scanner class by using the new keyword. Here, we pass the predefined object System.in as its input stream to the constructor of Scanner class. We can also pass the object of File class, when we want to read input from a file.
For example:
Scanner sc_obj = new Scanner (System.in);
We can also pass the string directly in the constructor of Scanner class.
For example:
Scanner sc_obj = new Scanner (“Hello World”);
3. Scanner class has various nextXXX() methods to read different types of data. For example, to read the integer values, there is nextInt() method.
The following table describes different methods to read different types of inputs:
Method name | Description |
nextInt() | To read an int type of input. |
nextFloat() | To read a float type of input. |
nextDouble() | To read a double type of input. |
next() | To read next input from Scanner which is in use, which is of String type. |
nextLine() | To read a string input, skipped of the Scanner object. |
nextBoolean() | To read a boolean type of input. |
nextLong() | To read a long type of input. |
nextShort() | To read a short type of input. |
nextByte() | To read a byte type of input. |
4. We can use the next().charAt(0) to read a single character. Here, the next() method returns next token from the string input and charAt(0) method returns the first character of that string.
Example 1:
Let’s consider a basic example where we use Java Scanner class to inputs of different types using the above methods and print it.
TestScanner1.java
//importing Scanner class
import java.util.Scanner;
public class TestScanner1 {
public static void main(String[] args) {
//creating instance of Scanner class
//initializing with predefined input
Scanner sc_obj = new Scanner (System.in);
//reading string input
System.out.println("Enter name:");
String name = sc_obj.nextLine();
//reading integer input
System.out.println("Enter roll no.:");
int roll_no = sc_obj.nextInt();
//reading character input
System.out.println("Enter grade (A-F):");
char grade = sc_obj.next().charAt(0);
//printing the data
System.out.println("Name: " + name);
System.out.println("Roll no.: " + roll_no);
System.out.println("Grade: " + grade);
}
}
Output:
Type of input using Scanner
In a Java program, sometimes we need to check the next value that we read is of particular type or the input has ended (EOF marker occurred).
To check if the input is of certain type, Scanner class has different methods as hasNextXXX(). For example to check the integer input, we use the hasNextInt() method. The method returns Boolean values (true / false), true if the Scanner has input of integer type.
The following table describes some of the hasNextXXX() methods for different types:
Method name | Description |
hasNext() | Returns true when the scanner object has next token as input. |
hasNextInt() | To check if next input is of int type. |
hasNextFloat() | To check if next input is of float type. |
hasNextDouble() | To check if next input is of double type. |
hasNextBoolean() | To check if next input is of boolean type. |
hasNextByte() | To check if next input is of byte type. |
hasNextLine() | To check if next input has other line in Scanner or not. |
hasNextLong() | To check if next input is of long type. |
hasNextShort() | To check if next input is of short type. |
Example 2:
Let’s consider following example to understand how to check the input type using different hasNextXXX() methods.
TestScanner2.java
//importing Scanner class
import java.util.Scanner;
public class TestScanner2
{
public static void main(String[] args)
{
//initializing a string
String str = "Hello World!";
//creating object of Scanner class
//passing string str to its constructor
Scanner sc_obj1 = new Scanner(str);
//using hasNext() to check Scanner contains token or not
boolean res = sc_obj1.hasNext();
System.out.println("Does Scanner has token? : " + res);
System.out.println("String is : " + sc_obj1.nextLine());
sc_obj1.close();
//creating a new object of Scanner
Scanner sc_obj2 = new Scanner(System.in);
System.out.println("Enter a number:");
// Check if Scanner has an int value using hasNextInt()
if (sc_obj2.hasNextInt()){
// Read the int value
int n1 = sc_obj2.nextInt();
System.out.println("Integer input: " + n1);
return;
}
System.out.println("Not an integer input!!");
sc_obj2.close();
}
}
Output 1:
Output 2:
Delimiters
Delimiter in Scanner class are used to break the input into tokens. The default delimiter is whitespace.
Following table describes different methods to use the delimiters in Java:
Method name | Description |
delimiter() | To get the pattern which Scanner class is using to match the delimiters. |
findInLine() | To get next occurrence of pattern created by a string, ignoring delimiters. |
findWithinHorizon() | To find next occurrence of pattern created by a string. |
skip() | To skip the input that matches with given pattern, ignoring delimiters. |
tokens() | To get stream of tokens which is separated by delimiters. |
useDelimiter() | To set the current delimiting pattern of Scanner to the given pattern. |
Example 3:
Let’s consider a basic example where we use the methods delimiter() and useDelimiter().
TestDelimiter.java
//importing Scanner class
import java.util.Scanner;
public class TestDelimiter {
public static void main(String[] args) {
//declaring and initializing a string
String str = "This is #an example #of #Scanner class";
//creating Scanner object
Scanner sc_obj = new Scanner(str);
//changing the delimiter of Scanner
//default is whitespace
sc_obj.useDelimiter("#");
//printing the string with delimiter
System.out.println("\nString with # : " + str);
//printing the string separated by delimiter
System.out.println("\nTokenized string:");
while(sc_obj.hasNext()){
System.out.println(sc_obj.next());
}
//displaying the new delimiter using delimiter()
System.out.println("\nNew delimiter is: " + sc_obj.delimiter());
sc_obj.close();
}
}
Output:
In this way, we have learned how to use the Scanner class and its different methods in a Java program.