234

How could I read input from the console using the Scanner class? Something like this:

System.out.println("Enter your username: ");
Scanner = input(); // Or something like this, I don't know the code

Basically, all I want is have the scanner read an input for the username, and assign the input to a String variable.

Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Hock3yPlayer
  • 2,391
  • 2
  • 11
  • 9
  • 1
    Check out here > [Java program to get input from user using scanner class](http://www.msccomputerscience.com/2013/01/write-java-program-to-get-input-from.html) – ARJUN Oct 15 '14 at 09:01
  • 2
    Good code sample: http://codeflex.co/java-scanner-example-read-from-console/ – John Detroit Apr 11 '18 at 11:20

15 Answers15

355

A simple example to illustrate how java.util.Scanner works would be reading a single integer from System.in. It's really quite simple.

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

To retrieve a username I would probably use sc.nextLine().

System.out.println("Enter your username: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("Your username is " + username);

You could also use next(String pattern) if you want more control over the input, or just validate the username variable.

You'll find more information on their implementation in the API Documentation for java.util.Scanner

Radiodef
  • 35,285
  • 14
  • 78
  • 114
Rune Vikestad
  • 4,388
  • 1
  • 22
  • 34
  • 1
    Let's say I only use the scanner once and don't want to clutter my code by initializing an then closing the Scanner - is there a way to get input from the user without constructing a class? – Nearoo Oct 13 '17 at 08:12
  • 4
    You could use a try with resource statement in JDK 8 such as; try(Scanner scanner = new Scanner(System.in)){ } – Rune Vikestad Oct 15 '17 at 21:41
35
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();
Matt_Bro
  • 12,348
  • 2
  • 24
  • 40
25

Reading Data From The Console

  • BufferedReader is synchronized, so read operations on a BufferedReader can be safely done from multiple threads. The buffer size may be specified, or the default size(8192) may be used. The default is large enough for most purposes.

    readLine() « just reads data line by line from the stream or source. A line is considered to be terminated by any one these: \n, \r (or) \r\n

  • Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace(\s) and it is recognised by Character.isWhitespace.

    « Until the user enters data, the scanning operation may block, waiting for input. « Use Scanner(BUFFER_SIZE = 1024) if you want to parse a specific type of token from a stream. « A scanner however is not thread safe. It has to be externally synchronized.

    next() « Finds and returns the next complete token from this scanner. nextInt() « Scans the next token of the input as an int.

Code

String name = null;
int number;

java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
name = in.readLine(); // If the user has not entered anything, assume the default value.
number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it.
System.out.println("Name " + name + "\t number " + number);

java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s");
name = sc.next();  // It will not leave until the user enters data.
number = sc.nextInt(); // We can read specific data.
System.out.println("Name " + name + "\t number " + number);

// The Console class is not working in the IDE as expected.
java.io.Console cnsl = System.console();
if (cnsl != null) {
    // Read a line from the user input. The cursor blinks after the specified input.
    name = cnsl.readLine("Name: ");
    System.out.println("Name entered: " + name);
}

Inputs and outputs of Stream

Reader Input:     Output:
Yash 777          Line1 = Yash 777
     7            Line1 = 7

Scanner Input:    Output:
Yash 777          token1 = Yash
                  token2 = 777
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Yash
  • 7,342
  • 2
  • 55
  • 63
17

There is problem with the input.nextInt() method - it only reads the int value.

So when reading the next line using input.nextLine() you receive "\n", i.e. the Enter key. So to skip this you have to add the input.nextLine().

Try it like that:

 System.out.print("Insert a number: ");
 int number = input.nextInt();
 input.nextLine(); // This line you have to add (it consumes the \n character)
 System.out.print("Text1: ");
 String text1 = input.nextLine();
 System.out.print("Text2: ");
 String text2 = input.nextLine();
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Vaibhav Bhalla
  • 631
  • 7
  • 8
10

There are several ways to get input from the user. Here in this program we will take the Scanner class to achieve the task. This Scanner class comes under java.util, hence the first line of the program is import java.util.Scanner; which allows the user to read values of various types in Java. The import statement line should have to be in the first line the java program, and we proceed further for code.

in.nextInt(); // It just reads the numbers

in.nextLine(); // It get the String which user enters

To access methods in the Scanner class create a new scanner object as "in". Now we use one of its method, that is "next". The "next" method gets the string of text that a user enters on the keyboard.

Here I'm using in.nextLine(); to get the String which the user enters.

import java.util.Scanner;

class GetInputFromUser {
    public static void main(String args[]) {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Jaimin Patel
  • 4,091
  • 3
  • 29
  • 34
9
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] arguments){
        Scanner input = new Scanner(System.in);

        String username;
        double age;
        String gender;
        String marital_status;
        int telephone_number;

        // Allows a person to enter his/her name   
        Scanner one = new Scanner(System.in);
        System.out.println("Enter Name:" );  
        username = one.next();
        System.out.println("Name accepted " + username);

        // Allows a person to enter his/her age   
        Scanner two = new Scanner(System.in);
        System.out.println("Enter Age:" );  
        age = two.nextDouble();
        System.out.println("Age accepted " + age);

        // Allows a person to enter his/her gender  
        Scanner three = new Scanner(System.in);
        System.out.println("Enter Gender:" );  
        gender = three.next();
        System.out.println("Gender accepted " + gender);

        // Allows a person to enter his/her marital status
        Scanner four = new Scanner(System.in);
        System.out.println("Enter Marital status:" );  
        marital_status = four.next();
        System.out.println("Marital status accepted " + marital_status);

        // Allows a person to enter his/her telephone number
        Scanner five = new Scanner(System.in);
        System.out.println("Enter Telephone number:" );  
        telephone_number = five.nextInt();
        System.out.println("Telephone number accepted " + telephone_number);
    }
}
Radiodef
  • 35,285
  • 14
  • 78
  • 114
  • 5
    Is there any particular reason why a new Scanner is created every time, or is this just copy+paste without understanding how it works? – Evgeni Sergeev Jun 22 '15 at 10:22
  • 1
    @EvgeniSergeev new Scanner is the object you create to get the user input. read more on [Scanner class](http://www.elcaro-guide.com/java/scanner-class-and-getting-user-inputs) ... – user3598655 Dec 25 '15 at 14:24
  • definitely copy pasted. There is no need for a new scanner every time (this also doesn't follow java variable naming convention). – gnomed Feb 17 '17 at 18:44
6

You can make a simple program to ask for the user's name and print whatever the reply use inputs.

Or ask the user to enter two numbers and you can add, multiply, subtract, or divide those numbers and print the answers for user inputs just like the behavior of a calculator.

So there you need the Scanner class. You have to import java.util.Scanner;, and in the code you need to use:

Scanner input = new Scanner(System.in);

input is a variable name.

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name: ");
s = input.next(); // Getting a String value

System.out.println("Please enter your age: ");
i = input.nextInt(); // Getting an integer

System.out.println("Please enter your salary: ");
d = input.nextDouble(); // Getting a double

See how this differs: input.next();, i = input.nextInt();, d = input.nextDouble();

According to a String, int and a double varies the same way for the rest. Don't forget the import statement at the top of your code.

Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
user3598655
  • 301
  • 3
  • 3
  • 2
    This is actually a proper explanation, But it could be more better if you add some more methods to it like nextLine(), nextLong() .. etc – subhashis Feb 01 '15 at 15:24
  • Students must follow the examples and test the rest of the methods and learn by themselves that's what I believe as learning with own experience. – user3598655 Aug 29 '16 at 05:36
4

A simple example:

import java.util.Scanner;

public class Example
{
    public static void main(String[] args)
    {
        int number1, number2, sum;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter First multiple");
        number1 = input.nextInt();

        System.out.println("Enter second multiple");
        number2 = input.nextInt();

        sum = number1 * number2;

        System.out.printf("The product of both number is %d", sum);
    }
}
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Clark
  • 49
  • 1
3

When the user enters his/her username, check for valid entry also.

java.util.Scanner input = new java.util.Scanner(System.in);
String userName;
final int validLength = 6; // This is the valid length of an user name

System.out.print("Please enter the username: ");
userName = input.nextLine();

while(userName.length() < validLength) {

    // If the user enters less than validLength characters
    // ask for entering again
    System.out.println(
        "\nUsername needs to be " + validLength + " character long");

    System.out.print("\nPlease enter the username again: ");
    userName = input.nextLine();
}

System.out.println("Username is: " + userName);
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Anirban Nag 'tintinmj'
  • 4,897
  • 3
  • 26
  • 47
2
import java.util.*;

class Ss
{
    int id, salary;
    String name;

   void Ss(int id, int salary, String name)
    {
        this.id = id;
        this.salary = salary;
        this.name = name;
    }

    void display()
    {
        System.out.println("The id of employee:" + id);
        System.out.println("The name of employye:" + name);
        System.out.println("The salary of employee:" + salary);
    }
}

class employee
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);

        Ss s = new Ss(sc.nextInt(), sc.nextInt(), sc.nextLine());
        s.display();
    }
}
sunil
  • 21
  • 1
2

Here is the complete class which performs the required operation:

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int valid = 6;

        Scanner one = new Scanner(System.in);
        System.out.println("Enter your username: ");
        String s = one.nextLine();

        if (s.length() < valid) {
            System.out.println("Enter a valid username");
            System.out.println(
                "User name must contain " + valid + " characters");
            System.out.println("Enter again: ");
            s = one.nextLine();
        }

        System.out.println("Username accepted: " + s);

        Scanner two = new Scanner(System.in);
        System.out.println("Enter your age: ");
        int a = two.nextInt();
        System.out.println("Age accepted: " + a);

        Scanner three = new Scanner(System.in);
        System.out.println("Enter your sex: ");
        String sex = three.nextLine();
        System.out.println("Sex accepted: " + sex);
    }
}
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
2
  1. To read input:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    
  2. To read input when you call a method with some arguments/parameters:

    if (args.length != 2) {
        System.err.println("Utilizare: java Grep <fisier> <cuvant>");
        System.exit(1);
    }
    try {
        grep(args[0], args[1]);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    
Tom
  • 14,120
  • 16
  • 41
  • 47
MyUserQuestion
  • 295
  • 1
  • 8
1

There is a simple way to read from the console.

Please find the below code:

import java.util.Scanner;

    public class ScannerDemo {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);

            // Reading of Integer
            int number = sc.nextInt();

            // Reading of String
            String str = sc.next();
        }
    }

For a detailed understanding, please refer to the below documents.

Doc

Now let's talk about the detailed understanding of the Scanner class working:

public Scanner(InputStream source) {
    this(new InputStreamReader(source), WHITESPACE_PATTERN);
}

This is the constructor for creating the Scanner instance.

Here we are passing the InputStream reference which is nothing but a System.In. Here it opens the InputStream Pipe for console input.

public InputStreamReader(InputStream in) {
    super(in);
    try {
        sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## Check lock object
    }
    catch (UnsupportedEncodingException e) {
        // The default encoding should always be available
        throw new Error(e);
    }
}

By passing the System.in this code will opens the socket for reading from console.

Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Hasnain Ali Bohra
  • 1,771
  • 2
  • 9
  • 20
1

You can flow this code:

Scanner obj= new Scanner(System.in);
String s = obj.nextLine();
Peter Mortensen
  • 28,342
  • 21
  • 95
  • 123
Tarik Billa
  • 102
  • 1
  • 4
  • 1
    This doesn't provide new information and is even less helpful than existing answers due to missing explanations. – Tom Sep 12 '17 at 05:38
  • 1
    What do you mean by *"flow this code"*? Do you mean *"follow this code"*? Or something else? – Peter Mortensen Mar 21 '18 at 18:01
0

You can use the Scanner class in Java

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println("String: " + s);
Yasir Shabbir Choudhary
  • 1,932
  • 2
  • 21
  • 26